home *** CD-ROM | disk | FTP | other *** search
/ Windows Game Programming for Dummies (2nd Edition) / WinGamProgFD.iso / mac / DirectX SDK / DXSDK / include / DShowIDL / tuner.idl < prev    next >
Text File  |  2001-10-08  |  153KB  |  4,226 lines

  1. //------------------------------------------------------------------------------
  2. // File: Tuner.idl
  3. //
  4. // Desc: 
  5. //
  6. // Copyright (c) 1999-2001, Microsoft Corporation.  All rights reserved.
  7. //------------------------------------------------------------------------------
  8.  
  9.  
  10. cpp_quote("//+-------------------------------------------------------------------------")
  11. cpp_quote("//")
  12. cpp_quote("//  Microsoft Windows")
  13. cpp_quote("//  Copyright (C) Microsoft Corporation, 1999-2001.")
  14. cpp_quote("//")
  15. cpp_quote("//--------------------------------------------------------------------------")
  16. cpp_quote("#pragma once")
  17.  
  18. #include <olectl.h>
  19. #ifndef DO_NO_IMPORTS
  20. import "oaidl.idl";
  21. import "comcat.idl";
  22. import "strmif.idl";
  23. import "bdatypes.h";
  24. import "regbag.idl";
  25. #endif
  26.  
  27. cpp_quote("#include <bdatypes.h>")
  28.  
  29. /////////////////////////////////////////////////////////////////////////////
  30. //
  31. //  Windows XP vs. DirectX 8.0 header merge
  32. //
  33. //  Separate the updated Windows XP version of this header from the downlevel
  34. //  version that shipped with the DirectX 8.0 SDK.  Since development 
  35. //  on BDA technology continued for Windows XP, some changes were made to
  36. //  this file in order to improve the interface and functionality.
  37. //
  38. //  To maintain compatibility with older applications which rely on the
  39. //  DirectX 8.0 versions of these files, the DirectX 8.1 version includes
  40. //  both the Windows XP content and the DirectX 8.0 content, which are 
  41. //  separated by the #if (WINVER >= 0x501) preprocessor directive.
  42. //
  43. //  Therefore, if you define WINVER to be 0x501 to specify Windows XP,
  44. //  the revised content will be compiled.  Otherwise, the original 
  45. //  DirectX 8.0 content will be used.
  46. //
  47. /////////////////////////////////////////////////////////////////////////////
  48.  
  49. #if (WINVER >= 0x501)    // Windows XP content
  50.  
  51.  
  52. interface ITuningSpaceContainer;
  53. interface ITuningSpace;
  54. interface IEnumTuningSpaces;
  55. interface ITuneRequest;
  56. interface ITuner;
  57. interface IScanningTuner;
  58. interface IEnumComponentTypes;
  59. interface IComponentTypes;
  60. interface IComponentType;
  61. interface ILanguageComponentType;
  62. interface IEnumComponents;
  63. interface IComponents;
  64. interface IComponent;
  65. interface IMPEG2ComponentType;
  66. interface IMPEG2Component;
  67. interface ILocator;
  68. interface IATSCLocator;
  69. interface IDVBSLocator;
  70. interface IDVBTLocator;
  71.  
  72. // tuner.idl:
  73. //  interface ITuningSpaceContainer : IDispatch
  74. //  interface ITuningSpace : IDispatch
  75. //  interface ITuneRequest : IDispatch
  76. //  interface IComponentType : IDispatch
  77. //  interface ILanguageComponentType : IComponentType
  78. //  interface IComponentTypes : IDispatch
  79. //  interface IComponent : IDispatch
  80. //  interface IComponents : IDispatch
  81. //  interface ITVTuningSpace : ITuningSpace
  82. //  interface IFMRadioTuningSpace : ITuningSpace
  83. //  interface IAMRadioTuningSpace : ITuningSpace
  84. //  interface IAnalogTVTuningSpace : ITVTuningSpace
  85. //  interface IAnalogTVAudioComponent : IComponent
  86. //  interface IAnalogTVDataComponent : IComponent
  87. //  interface IChannelTuneRequest : ITuneRequest
  88. //  interface IDVBComponent : IComponent
  89. //  interface IDVBTuneRequest : ITuneRequest
  90.  
  91. // DISPIDs for ITuningSpaces interface
  92. // we don't expect to inherit from this interface and consequently there's
  93. //     no chance of collision, thus we'll allow midl to auto assign ids for this one
  94.  
  95. // DISPIDs for ITuningSpace interface
  96. enum {
  97. DISPID_TUNER_TS_UNIQUENAME                      = 1,
  98. DISPID_TUNER_TS_FRIENDLYNAME                    = 2,
  99. DISPID_TUNER_TS_CLSID                           = 3,
  100. DISPID_TUNER_TS_NETWORKTYPE                     = 4,
  101. DISPID_TUNER_TS__NETWORKTYPE                    = 5,
  102. DISPID_TUNER_TS_CREATETUNEREQUEST               = 6,
  103. DISPID_TUNER_TS_ENUMCATEGORYGUIDS               = 7,
  104. DISPID_TUNER_TS_ENUMDEVICEMONIKERS              = 8,
  105. DISPID_TUNER_TS_DEFAULTPREFERREDCOMPONENTTYPES  = 9,
  106. DISPID_TUNER_TS_FREQMAP                         = 10,
  107. DISPID_TUNER_TS_DEFLOCATOR                      = 11,
  108. DISPID_TUNER_TS_CLONE                           = 12,
  109.  
  110. // DISPIDs for ITuneRequest interface
  111. DISPID_TUNER_TR_TUNINGSPACE                     = 1,
  112. DISPID_TUNER_TR_COMPONENTS                      = 2,
  113. DISPID_TUNER_TR_CLONE                           = 3,
  114. DISPID_TUNER_TR_LOCATOR                         = 4,
  115.  
  116.  
  117. // DISPID for IComponentType interface
  118. DISPID_TUNER_CT_CATEGORY                        = 1,
  119. DISPID_TUNER_CT_MEDIAMAJORTYPE                  = 2,
  120. DISPID_TUNER_CT__MEDIAMAJORTYPE                 = 3,
  121. DISPID_TUNER_CT_MEDIASUBTYPE                    = 4,
  122. DISPID_TUNER_CT__MEDIASUBTYPE                   = 5,
  123. DISPID_TUNER_CT_MEDIAFORMATTYPE                 = 6,
  124. DISPID_TUNER_CT__MEDIAFORMATTYPE                = 7,
  125. DISPID_TUNER_CT_MEDIATYPE                       = 8,
  126. DISPID_TUNER_CT_CLONE                           = 9,
  127.  
  128.  
  129. // DISPID for ILanguageComponentType interface
  130. DISPID_TUNER_LCT_LANGID                         = 100,
  131.  
  132. // DISPID for IMPEG2ComponentType interface
  133. DISPID_TUNER_MP2CT_TYPE                         = 200,
  134.  
  135. // DISPID for IATSCComponentType interface
  136. DISPID_TUNER_ATSCCT_FLAGS                       = 300,
  137.  
  138. // DISPID for ILocator interface
  139. DISPID_TUNER_L_CARRFREQ                         = 1,
  140. DISPID_TUNER_L_INNERFECMETHOD                   = 2,
  141. DISPID_TUNER_L_INNERFECRATE                     = 3,
  142. DISPID_TUNER_L_OUTERFECMETHOD                   = 4,
  143. DISPID_TUNER_L_OUTERFECRATE                     = 5,
  144. DISPID_TUNER_L_MOD                              = 6,
  145. DISPID_TUNER_L_SYMRATE                          = 7,
  146. DISPID_TUNER_L_CLONE                            = 8,
  147.  
  148. // DISPID for IATSCLocator interface
  149. DISPID_TUNER_L_ATSC_PHYS_CHANNEL                = 201,
  150. DISPID_TUNER_L_ATSC_TSID                        = 202,
  151.  
  152. // DISPID for IDVBTLocator interface
  153. DISPID_TUNER_L_DVBT_BANDWIDTH                   = 301,
  154. DISPID_TUNER_L_DVBT_LPINNERFECMETHOD            = 302,
  155. DISPID_TUNER_L_DVBT_LPINNERFECRATE              = 303,
  156. DISPID_TUNER_L_DVBT_GUARDINTERVAL               = 304,
  157. DISPID_TUNER_L_DVBT_HALPHA                      = 305,
  158. DISPID_TUNER_L_DVBT_TRANSMISSIONMODE            = 306,
  159. DISPID_TUNER_L_DVBT_INUSE                       = 307,
  160.  
  161. // DISPID for IDVBSLocator interface
  162. DISPID_TUNER_L_DVBS_POLARISATION                = 401,
  163. DISPID_TUNER_L_DVBS_WEST                        = 402,
  164. DISPID_TUNER_L_DVBS_ORBITAL                     = 403,
  165. DISPID_TUNER_L_DVBS_AZIMUTH                     = 404,
  166. DISPID_TUNER_L_DVBS_ELEVATION                   = 405,
  167.  
  168. // DISPID for IDVBCLocator interface
  169.  
  170. // DISPIDs for IComponent interface
  171. DISPID_TUNER_C_TYPE                             = 1,
  172. DISPID_TUNER_C_STATUS                           = 2,
  173. DISPID_TUNER_C_LANGID                           = 3,
  174. DISPID_TUNER_C_DESCRIPTION                      = 4,
  175. DISPID_TUNER_C_CLONE                            = 5,
  176.  
  177. // DISPIDs for IMPEG2Component interface
  178. DISPID_TUNER_C_MP2_PID                           = 101,
  179. DISPID_TUNER_C_MP2_PCRPID                        = 102,
  180. DISPID_TUNER_C_MP2_PROGNO                        = 103,
  181.  
  182. // DISPIDs for IDVBTuningSpace interface
  183. DISPID_TUNER_TS_DVB_SYSTEMTYPE                = 101,
  184. // DISPIDs for IDVBTuningSpace2 interface
  185. DISPID_TUNER_TS_DVB2_NETWORK_ID               = 102,
  186. // DISPIDs for IDVBSTuningSpace interface
  187. DISPID_TUNER_TS_DVBS_LOW_OSC_FREQ             = 1001,
  188. DISPID_TUNER_TS_DVBS_HI_OSC_FREQ              = 1002,
  189. DISPID_TUNER_TS_DVBS_LNB_SWITCH_FREQ          = 1003,
  190. DISPID_TUNER_TS_DVBS_INPUT_RANGE              = 1004,
  191. DISPID_TUNER_TS_DVBS_SPECTRAL_INVERSION       = 1005,
  192.  
  193. // DISPIDs for IAnalogRadioTuningSpace interface
  194. DISPID_TUNER_TS_AR_MINFREQUENCY               = 101,
  195. DISPID_TUNER_TS_AR_MAXFREQUENCY               = 102,
  196. DISPID_TUNER_TS_AR_STEP                       = 103,
  197.  
  198. // DISPIDs for IAnalogTVTuningSpace interface
  199. DISPID_TUNER_TS_ATV_MINCHANNEL                 = 101,
  200. DISPID_TUNER_TS_ATV_MAXCHANNEL                 = 102,
  201. DISPID_TUNER_TS_ATV_INPUTTYPE                  = 103,
  202. DISPID_TUNER_TS_ATV_COUNTRYCODE                = 104,
  203.  
  204. // DISPIDs for IATSCTuningSpace interface
  205. DISPID_TUNER_TS_ATSC_MINMINORCHANNEL           = 201,
  206. DISPID_TUNER_TS_ATSC_MAXMINORCHANNEL           = 202,
  207. DISPID_TUNER_TS_ATSC_MINPHYSCHANNEL            = 203,
  208. DISPID_TUNER_TS_ATSC_MAXPHYSCHANNEL            = 204,
  209.  
  210. // DISPID for IAnalogTVAudioComponent interface
  211. DISPID_CHTUNER_ATVAC_CHANNEL                    = 101,
  212.  
  213. // DISPIDs for IAnalogTVDataComponent interface
  214. DISPID_CHTUNER_ATVDC_SYSTEM                     = 101,
  215. DISPID_CHTUNER_ATVDC_CONTENT                    = 102,
  216.  
  217. // DISPID for IChannelTuneRequest interface
  218. DISPID_CHTUNER_CTR_CHANNEL                      = 101,
  219.  
  220. // DISPID IATSCChannelTuneRequest
  221. DISPID_CHTUNER_ACTR_MINOR_CHANNEL               = 201,
  222.  
  223. // DISPIDs for IDVBComponent interface
  224. DISPID_DVBTUNER_DVBC_ATTRIBUTESVALID            = 101,
  225. DISPID_DVBTUNER_DVBC_PID                        = 102,
  226. DISPID_DVBTUNER_DVBC_TAG                        = 103,
  227. DISPID_DVBTUNER_DVBC_COMPONENTTYPE              = 104,
  228.  
  229. // DISPIDs for IDVBTuneRequest interface
  230. DISPID_DVBTUNER_ONID         = 101,
  231. DISPID_DVBTUNER_TSID         = 102,
  232. DISPID_DVBTUNER_SID          = 103,
  233.  
  234. // DISPIDs for IMPEG2TuneRequest interface
  235. DISPID_MP2TUNER_TSID         = 101,
  236. DISPID_MP2TUNER_PROGNO       = 102,
  237.  
  238. // DISPIDs for IMPEG2TuneRequestFactory interface
  239. DISPID_MP2TUNERFACTORY_CREATETUNEREQUEST        = 1,
  240.  
  241. };
  242.  
  243.  
  244. //////////////////////////////////////////////////////////////////////////////////////
  245. // Tuning Space Container
  246. //////////////////////////////////////////////////////////////////////////////////////
  247. // simple read-only collection of tuning spaces for enumerating subsets of the total
  248. // set of system tuning spaces
  249.     [
  250.         object,
  251.         uuid(901284E4-33FE-4b69-8D63-634A596F3756),
  252.         dual,
  253.         oleautomation,
  254.         nonextensible,
  255.         helpstring("Tuning Space Collection Interface"),
  256.         pointer_default(unique)
  257.     ]
  258.     interface ITuningSpaces : IDispatch
  259.     {
  260.  
  261.         [propget, helpstring("Number of items in the collection")]
  262.         HRESULT Count(
  263.             [out, retval] long *Count
  264.             );
  265.  
  266.         [propget, id(DISPID_NEWENUM), hidden, restricted]
  267.         HRESULT _NewEnum(
  268.             [out, retval] IEnumVARIANT** NewEnum
  269.             );
  270.  
  271.         [id(DISPID_VALUE),
  272.             propget,
  273.             helpstring("Find the Tuning Space with the specified Index")]
  274.         HRESULT Item(
  275.             [in] VARIANT varIndex,
  276.             [out, retval] ITuningSpace** TuningSpace
  277.             );
  278.  
  279.         [propget, hidden, restricted, 
  280.             helpstring("convenience function so C++ apps don't have to unpack VARIANT")]
  281.         HRESULT EnumTuningSpaces(
  282.             [out, retval] IEnumTuningSpaces** NewEnum
  283.             );
  284.  
  285.     }
  286.  
  287. //////////////////////////////////////////////////////////////////////////////////////
  288. // Tuning Space Container
  289. //////////////////////////////////////////////////////////////////////////////////////
  290.     [
  291.         object,
  292.         uuid(5B692E84-E2F1-11d2-9493-00C04F72D980),
  293.         dual,
  294.         oleautomation,
  295.         hidden,
  296.         nonextensible,
  297.         helpstring("Tuning Space Container Interface"),
  298.         pointer_default(unique)
  299.     ]
  300.     interface ITuningSpaceContainer : IDispatch
  301.     {
  302.  
  303.         [propget, helpstring("Number of items in the collection")]
  304.         HRESULT Count(
  305.             [out, retval] long *Count
  306.             );
  307.  
  308.         [propget, id(DISPID_NEWENUM), hidden, restricted]
  309.         HRESULT _NewEnum(
  310.             [out, retval] IEnumVARIANT** NewEnum
  311.             );
  312.  
  313.         [id(DISPID_VALUE),
  314.             propget,
  315.             helpstring("Find the Tuning Space with the specified Index")]
  316.         HRESULT Item(
  317.             [in] VARIANT varIndex,
  318.             [out, retval] ITuningSpace** TuningSpace
  319.             );
  320.         [id(DISPID_VALUE),
  321.             propput,
  322.             helpstring("Change the Tuning Space with the specified Index")]
  323.         HRESULT Item([in] VARIANT varIndex, [in] ITuningSpace *TuningSpace);
  324.  
  325.         [helpstring("Returns the collection of Tuning Spaces with the same implementation")]
  326.         HRESULT TuningSpacesForCLSID(
  327.             [in] BSTR SpaceCLSID,
  328.             [out, retval] ITuningSpaces** NewColl
  329.             );
  330.  
  331.         [hidden, restricted, 
  332.             helpstring("Convenience Function for enumerating from C")]
  333.         HRESULT _TuningSpacesForCLSID(
  334.             [in] REFCLSID SpaceCLSID,
  335.             [out, retval] ITuningSpaces** NewColl
  336.             );
  337.  
  338.         [helpstring("Returns the collection of Tuning Spaces matching the name")]
  339.         HRESULT TuningSpacesForName(
  340.             [in] BSTR Name,
  341.             [out, retval] ITuningSpaces** NewColl
  342.             );
  343.  
  344.         [helpstring("Find Local ID Number of the specified Tuning Space")]
  345.         HRESULT FindID(
  346.             [in] ITuningSpace *TuningSpace,
  347.             [out, retval] long *ID
  348.             );
  349.  
  350.  
  351.         [id(DISPID_ADDITEM), 
  352.          helpstring("Add a new Tuning Space to the collection.  This tuning space will be persisted unless removed")]
  353.         HRESULT Add(
  354.             [in] ITuningSpace* TuningSpace,
  355.             [out, retval] VARIANT* NewIndex
  356.             );
  357.  
  358.         [propget, hidden, restricted, helpstring("Convenience Function for enumerating collection from C")]
  359.         HRESULT EnumTuningSpaces(
  360.             [out, retval] IEnumTuningSpaces **ppEnum
  361.             );
  362.  
  363.         [id(DISPID_REMOVEITEM), 
  364.          helpstring("Remove a Tuning Space from the collection.  this tuning space will be deleted from the registry")]
  365.         HRESULT Remove(
  366.             [in] VARIANT Index
  367.             );
  368.  
  369.         [propget, helpstring("Maximum number of items allowed in the collection")]
  370.         HRESULT MaxCount(
  371.             [out, retval] long *MaxCount
  372.             );
  373.  
  374.         // we don't allow script to set this, but we do allow c code to change it.
  375.         [propput, hidden, restricted, helpstring("Maximum number of items allowed in the collection")]
  376.         HRESULT MaxCount(
  377.             [in] long MaxCount
  378.             );
  379.  
  380.     }
  381.  
  382. //////////////////////////////////////////////////////////////////////////////////////
  383. // Tuning Space Interfaces
  384. //////////////////////////////////////////////////////////////////////////////////////
  385.  
  386. // note: the network type is the clsid of the tuning space implementation
  387.     [
  388.         object,
  389.         uuid(061C6E30-E622-11d2-9493-00C04F72D980),
  390.         dual,
  391.         oleautomation,
  392.         nonextensible,
  393.         helpstring("Tuning Space Interface"),
  394.         pointer_default(unique)
  395.     ]
  396.     interface ITuningSpace : IDispatch
  397.     {
  398.         [propget, id(DISPID_TUNER_TS_UNIQUENAME),
  399.              helpstring("Unique name of the Tuning Space")]
  400.         HRESULT UniqueName(
  401.             [out, retval] BSTR *Name
  402.             );
  403.  
  404.         [propput, id(DISPID_TUNER_TS_UNIQUENAME),
  405.              helpstring("Unique name of the Tuning Space")]
  406.         HRESULT UniqueName(
  407.             [in] BSTR Name
  408.             );
  409.  
  410.         [propget, id(DISPID_TUNER_TS_FRIENDLYNAME),
  411.              helpstring("User-friendly name of the Tuning Space")]
  412.         HRESULT FriendlyName(
  413.             [out, retval] BSTR *Name
  414.             );
  415.  
  416.         [propput, id(DISPID_TUNER_TS_FRIENDLYNAME),
  417.              helpstring("User-friendly name of the Tuning Space")]
  418.         HRESULT FriendlyName(
  419.             [in] BSTR Name
  420.             );
  421.  
  422.         [propget, id(DISPID_TUNER_TS_CLSID), 
  423.             helpstring("Returns the clsid of the tuning space implementation.  provides script access to IPersist:GetClassID")]
  424.         HRESULT CLSID(
  425.             [out, retval] BSTR* SpaceCLSID
  426.             );
  427.  
  428.         [propget, id(DISPID_TUNER_TS_NETWORKTYPE),
  429.              helpstring("Network Type (Network Proivder CLSID)")]
  430.         HRESULT NetworkType(
  431.             [out, retval] BSTR *NetworkTypeGuid
  432.             );
  433.         [propput, id(DISPID_TUNER_TS_NETWORKTYPE),
  434.              helpstring("Network Type (Network Proivder CLSID)")]
  435.         HRESULT NetworkType(
  436.             [in] BSTR NetworkTypeGuid
  437.             );
  438.  
  439.         [propget, id(DISPID_TUNER_TS__NETWORKTYPE),
  440.              helpstring("Network Type (Network Proivder CLSID)"), hidden, restricted]
  441.         HRESULT _NetworkType(
  442.             [out, retval] GUID* NetworkTypeGuid
  443.             );
  444.         [propput, id(DISPID_TUNER_TS__NETWORKTYPE),
  445.              helpstring("Network Type (Network Proivder CLSID)"), hidden, restricted]
  446.         HRESULT _NetworkType(
  447.             [in] REFCLSID NetworkTypeGuid
  448.             );
  449.  
  450.         // this method creates the "best" kind of tune request for this tuning space.
  451.         // the tuning space may support other kinds of tune requests created via 
  452.         // other factory mechanisms(for example, see mpeg2tunerequestfactory).  but, 
  453.         // this method is the preferred way to get a tune request as it always returns
  454.         // the optimal type of tune request for this space.
  455.         [id(DISPID_TUNER_TS_CREATETUNEREQUEST),
  456.             helpstring("Create a Tune Request object")]
  457.         HRESULT CreateTuneRequest(
  458.             [out, retval] ITuneRequest **TuneRequest
  459.             );
  460.  
  461.         [id(DISPID_TUNER_TS_ENUMCATEGORYGUIDS), hidden, restricted]
  462.         HRESULT EnumCategoryGUIDs(
  463.             [out, retval] IEnumGUID **ppEnum
  464.             );
  465.  
  466.         [id(DISPID_TUNER_TS_ENUMDEVICEMONIKERS), hidden, restricted]
  467.         HRESULT EnumDeviceMonikers(
  468.             [out, retval] IEnumMoniker **ppEnum
  469.             );
  470.  
  471.         [propget, id(DISPID_TUNER_TS_DEFAULTPREFERREDCOMPONENTTYPES)]
  472.         HRESULT DefaultPreferredComponentTypes(
  473.             [out, retval] IComponentTypes** ComponentTypes
  474.             );
  475.         [propput, id(DISPID_TUNER_TS_DEFAULTPREFERREDCOMPONENTTYPES)]
  476.         HRESULT DefaultPreferredComponentTypes(
  477.             [in] IComponentTypes* NewComponentTypes
  478.             );
  479.  
  480.         // the following property is for the network providers to store frequency/channel maps, frequency/transponder maps
  481.         // or whatever other mapping from carrier frequencies to frequency identifiers are appropriate for the tuning space
  482.         // in question.  the bstr is treated as a binary blob.  it is expected to contain embedded nulls,  and it may be formatted
  483.         // internally in whatever fashion the network provider sees fit.
  484.         [propget, id(DISPID_TUNER_TS_FREQMAP), hidden, restricted]
  485.         HRESULT FrequencyMapping([out, retval] BSTR *pMapping);
  486.         [propput, id(DISPID_TUNER_TS_FREQMAP), hidden, restricted]
  487.         HRESULT FrequencyMapping(BSTR Mapping);
  488.  
  489.         // the following property provides a starting point for the initial IScanningTuner after installation
  490.         [propget, id(DISPID_TUNER_TS_DEFLOCATOR)]
  491.         HRESULT DefaultLocator([out, retval] ILocator **LocatorVal);
  492.         [propput, id(DISPID_TUNER_TS_DEFLOCATOR)]
  493.         HRESULT DefaultLocator([in]ILocator *LocatorVal);
  494.  
  495.         HRESULT Clone([out, retval] ITuningSpace **NewTS);
  496.     }
  497.  
  498. //////////////////////////////////////////////////////////////////////////////////////
  499.     [
  500.         hidden,
  501.         restricted,
  502.         object,
  503.         uuid(8B8EB248-FC2B-11d2-9D8C-00C04F72D980),
  504.         pointer_default(unique)
  505.     ]
  506.     interface IEnumTuningSpaces : IUnknown
  507.     {
  508.         HRESULT Next(
  509.             [in] ULONG celt,
  510.             [out, size_is(celt), length_is(*pceltFetched)]
  511.                 ITuningSpace** rgelt,
  512.             [out] ULONG* pceltFetched
  513.             );
  514.  
  515.         HRESULT Skip(
  516.             [in] ULONG celt
  517.             );
  518.  
  519.         HRESULT Reset(void);
  520.  
  521.         HRESULT Clone(
  522.             [out] IEnumTuningSpaces** ppEnum
  523.             );
  524.     }
  525.  
  526. //////////////////////////////////////////////////////////////////////////////////////
  527.     [
  528.         object,
  529.         hidden,
  530.         nonextensible,
  531.         uuid(ADA0B268-3B19-4e5b-ACC4-49F852BE13BA),
  532.         pointer_default(unique)
  533.     ]
  534.     interface IDVBTuningSpace : ITuningSpace
  535.     {
  536.         [propget, id(DISPID_TUNER_TS_DVB_SYSTEMTYPE),
  537.          helpstring("Type of DVB System")
  538.         ]
  539.         HRESULT SystemType(
  540.             [out, retval] DVBSystemType *SysType
  541.             );
  542.         [propput, id(DISPID_TUNER_TS_DVB_SYSTEMTYPE),
  543.          helpstring("Type of DVB System")
  544.         ]
  545.         HRESULT SystemType(
  546.             [in] DVBSystemType SysType
  547.             );
  548.  
  549.     }
  550.  
  551. //////////////////////////////////////////////////////////////////////////////////////
  552.     [
  553.         object,
  554.         hidden,
  555.         nonextensible,
  556.         uuid(843188B4-CE62-43db-966B-8145A094E040),
  557.         pointer_default(unique)
  558.     ]
  559.     interface IDVBTuningSpace2 : IDVBTuningSpace
  560.     {
  561.         [propget, id(DISPID_TUNER_TS_DVB2_NETWORK_ID),
  562.          helpstring("Network ID of DVB System")
  563.         ]
  564.         HRESULT NetworkID(
  565.             [out, retval] long *NetworkID
  566.             );
  567.         [propput, id(DISPID_TUNER_TS_DVB2_NETWORK_ID),
  568.          helpstring("Network ID of DVB System")
  569.         ]
  570.         HRESULT NetworkID(
  571.             [in] long NetworkID
  572.             );
  573.  
  574.     }
  575.  
  576. //////////////////////////////////////////////////////////////////////////////////////
  577.     [
  578.         object,
  579.         hidden,
  580.         nonextensible,
  581.         uuid(CDF7BE60-D954-42fd-A972-78971958E470),
  582.         pointer_default(unique)
  583.     ]
  584.     interface IDVBSTuningSpace : IDVBTuningSpace2
  585.     {
  586.  
  587.         [propget, id(DISPID_TUNER_TS_DVBS_LOW_OSC_FREQ),
  588.          helpstring("Low Oscillator Frequency of DVB System in 10HZ units")
  589.         ]
  590.         HRESULT LowOscillator(
  591.             [out, retval] long *LowOscillator
  592.             );
  593.         [propput, id(DISPID_TUNER_TS_DVBS_LOW_OSC_FREQ),
  594.          helpstring("Low Oscillator Frequency of DVB System in 10HZ units")
  595.         ]
  596.         HRESULT LowOscillator(
  597.             [in] long LowOscillator
  598.             );
  599.         [propget, id(DISPID_TUNER_TS_DVBS_HI_OSC_FREQ),
  600.          helpstring("High Oscillator Frequency of DVB System in 10HZ units")
  601.         ]
  602.         HRESULT HighOscillator(
  603.             [out, retval] long *HighOscillator
  604.             );
  605.         [propput, id(DISPID_TUNER_TS_DVBS_HI_OSC_FREQ),
  606.          helpstring("High Oscillator Frequency of DVB System in 10HZ units")
  607.         ]
  608.         HRESULT HighOscillator(
  609.             [in] long HighOscillator
  610.             );
  611.         [propget, id(DISPID_TUNER_TS_DVBS_LNB_SWITCH_FREQ),
  612.          helpstring("LNB Switch Frequency of DVB System in 10HZ units")
  613.         ]
  614.         HRESULT LNBSwitch(
  615.             [out, retval] long *LNBSwitch
  616.             );
  617.         [propput, id(DISPID_TUNER_TS_DVBS_LNB_SWITCH_FREQ),
  618.          helpstring("LNB Switch Frequency of DVB System in 10HZ units")
  619.         ]
  620.         HRESULT LNBSwitch(
  621.             [in] long LNBSwitch
  622.             );
  623.         [propget, id(DISPID_TUNER_TS_DVBS_INPUT_RANGE),
  624.          helpstring("Which Option/Switch contains the requested signal source")
  625.         ]
  626.         HRESULT InputRange(
  627.             [out, retval] BSTR *InputRange
  628.             );
  629.         [propput, id(DISPID_TUNER_TS_DVBS_INPUT_RANGE),
  630.          helpstring("Which Option/Switch contains the requested signal source")
  631.         ]
  632.         HRESULT InputRange(
  633.             [in] BSTR InputRange
  634.             );
  635.         [propget, id(DISPID_TUNER_TS_DVBS_SPECTRAL_INVERSION),
  636.          helpstring("Which Option/Switch contains the requested signal source")
  637.         ]
  638.         HRESULT SpectralInversion(
  639.             [out, retval] SpectralInversion *SpectralInversionVal
  640.             );
  641.         [propput, id(DISPID_TUNER_TS_DVBS_SPECTRAL_INVERSION),
  642.          helpstring("Which Option/Switch contains the requested signal source")
  643.         ]
  644.         HRESULT SpectralInversion(
  645.             [in] SpectralInversion SpectralInversionVal
  646.             );
  647.  
  648.  
  649.     }
  650.  
  651.  
  652. //////////////////////////////////////////////////////////////////////////////////////
  653.     [
  654.         object,
  655.         hidden,
  656.         nonextensible,
  657.         uuid(2A6E293C-2595-11d3-B64C-00C04F79498E),
  658.         pointer_default(unique)
  659.     ]
  660.     interface IAnalogTVTuningSpace : ITuningSpace
  661.     {
  662.         [propget, id(DISPID_TUNER_TS_ATV_MINCHANNEL),
  663.          helpstring("Smallest channel number ever provided by this tuning space")
  664.         ]
  665.         HRESULT MinChannel(
  666.             [out, retval] long *MinChannelVal
  667.             );
  668.         [propput, id(DISPID_TUNER_TS_ATV_MINCHANNEL),
  669.          helpstring("Smallest channel number ever provided by this tuning space")
  670.         ]
  671.         HRESULT MinChannel(
  672.             [in] long NewMinChannelVal
  673.             );
  674.         [propget, id(DISPID_TUNER_TS_ATV_MAXCHANNEL),
  675.          helpstring("Largest channel number ever provided by this tuning space")
  676.         ]
  677.         HRESULT MaxChannel(
  678.             [out, retval] long *MaxChannelVal
  679.             );
  680.         [propput, id(DISPID_TUNER_TS_ATV_MAXCHANNEL),
  681.          helpstring("Largest channel number ever provided by this tuning space")
  682.         ]
  683.         HRESULT MaxChannel(
  684.             [in] long NewMaxChannelVal
  685.             );
  686.         [propget, id(DISPID_TUNER_TS_ATV_INPUTTYPE),
  687.          helpstring("Input type for this tuning space")
  688.         ]
  689.         HRESULT InputType([out, retval] TunerInputType *InputTypeVal);
  690.         [propput, id(DISPID_TUNER_TS_ATV_INPUTTYPE),
  691.          helpstring("Input type for this tuning space")
  692.         ]
  693.         HRESULT InputType([in] TunerInputType NewInputTypeVal);
  694.         [propget, id(DISPID_TUNER_TS_ATV_COUNTRYCODE),
  695.          helpstring("International dialing prefix for country of physical broadcast source")
  696.         ]
  697.         HRESULT CountryCode([out, retval] long *CountryCodeVal);
  698.         [propput, id(DISPID_TUNER_TS_ATV_COUNTRYCODE),
  699.          helpstring("International dialing prefix for country of physical broadcast source")
  700.         ]
  701.         HRESULT CountryCode([in] long NewCountryCodeVal);
  702.     }
  703.  
  704. //////////////////////////////////////////////////////////////////////////////////////
  705.     [
  706.         object,
  707.         hidden,
  708.         nonextensible,
  709.         uuid(0369B4E2-45B6-11d3-B650-00C04F79498E),
  710.         pointer_default(unique)
  711.     ]
  712. // note: we inherit ATSC from analog because we need the same properties.
  713. // - the definition of channel is overloaded to be the major channel,
  714. // - input type allows us to distinguish between broadcast and cable frequencies
  715. // which allows us to use the atsc tuning space class for "open cable".
  716. // - country code will allow us to redefine physical channel frequencies
  717. // if any other countries adopt ATSC which may happen in Latin America in particular.
  718.     interface IATSCTuningSpace : IAnalogTVTuningSpace
  719.     {
  720.         [propget, id(DISPID_TUNER_TS_ATSC_MINMINORCHANNEL),
  721.          helpstring("Smallest minor channel number ever provided by this tuning space")
  722.         ]
  723.         HRESULT MinMinorChannel(
  724.             [out, retval] long *MinMinorChannelVal
  725.             );
  726.         [propput, id(DISPID_TUNER_TS_ATSC_MINMINORCHANNEL),
  727.          helpstring("Smallest minor channel number ever provided by this tuning space")
  728.         ]
  729.         HRESULT MinMinorChannel(
  730.             [in] long NewMinMinorChannelVal
  731.             );
  732.         [propget, id(DISPID_TUNER_TS_ATSC_MAXMINORCHANNEL),
  733.          helpstring("Largest minor channel number ever provided by this tuning space")
  734.         ]
  735.         HRESULT MaxMinorChannel(
  736.             [out, retval] long *MaxMinorChannelVal
  737.             );
  738.         [propput, id(DISPID_TUNER_TS_ATSC_MAXMINORCHANNEL),
  739.          helpstring("Largest minor channel number ever provided by this tuning space")
  740.         ]
  741.         HRESULT MaxMinorChannel(
  742.             [in] long NewMaxMinorChannelVal
  743.             );
  744.         [propget, id(DISPID_TUNER_TS_ATSC_MINPHYSCHANNEL),
  745.          helpstring("Smallest physical channel number ever provided by this tuning space")
  746.         ]
  747.         HRESULT MinPhysicalChannel(
  748.             [out, retval] long *MinPhysicalChannelVal
  749.             );
  750.         [propput, id(DISPID_TUNER_TS_ATSC_MINPHYSCHANNEL),
  751.          helpstring("Smallest physical channel number ever provided by this tuning space")
  752.         ]
  753.         HRESULT MinPhysicalChannel(
  754.             [in] long NewMinPhysicalChannelVal
  755.             );
  756.         [propget, id(DISPID_TUNER_TS_ATSC_MAXPHYSCHANNEL),
  757.          helpstring("Largest physical channel number ever provided by this tuning space")
  758.         ]
  759.         HRESULT MaxPhysicalChannel(
  760.             [out, retval] long *MaxPhysicalChannelVal
  761.             );
  762.         [propput, id(DISPID_TUNER_TS_ATSC_MAXPHYSCHANNEL),
  763.          helpstring("Largest physical channel number ever provided by this tuning space")
  764.         ]
  765.         HRESULT MaxPhysicalChannel(
  766.             [in] long NewMaxPhysicalChannelVal
  767.             );
  768.  
  769.     }
  770.  
  771. //////////////////////////////////////////////////////////////////////////////////////
  772.     [
  773.         object,
  774.         hidden,
  775.         nonextensible,
  776.         uuid(2A6E293B-2595-11d3-B64C-00C04F79498E),
  777.         pointer_default(unique)
  778.     ]
  779.     interface IAnalogRadioTuningSpace : ITuningSpace {
  780.         [propget, id(DISPID_TUNER_TS_AR_MINFREQUENCY),
  781.          helpstring("Smallest frequency(khz) ever used by this tuning space")
  782.         ]
  783.         HRESULT MinFrequency(
  784.             [out, retval] long *MinFrequencyVal
  785.             );
  786.         [propput, id(DISPID_TUNER_TS_AR_MINFREQUENCY),
  787.          helpstring("Smallest frequency(khz) ever used by this tuning space")
  788.         ]
  789.         HRESULT MinFrequency(
  790.             [in] long NewMinFrequencyVal
  791.             );
  792.         [propget, id(DISPID_TUNER_TS_AR_MAXFREQUENCY),
  793.          helpstring("Largest frequency(khz) ever used by this tuning space")
  794.         ]
  795.         HRESULT MaxFrequency(
  796.             [out, retval] long *MaxFrequencyVal
  797.             );
  798.         [propput, id(DISPID_TUNER_TS_AR_MAXFREQUENCY),
  799.          helpstring("Largest frequency(khz) ever used by this tuning space")
  800.         ]
  801.         HRESULT MaxFrequency(
  802.             [in] long NewMaxFrequencyVal
  803.             );
  804.         [propget, id(DISPID_TUNER_TS_AR_STEP),
  805.          helpstring("Default step value(khz) to next frequency for this tuning space")
  806.         ]
  807.         HRESULT Step(
  808.             [out, retval] long *StepVal
  809.             );
  810.         [propput, id(DISPID_TUNER_TS_AR_STEP),
  811.          helpstring("Default step value(khz) to next frequency for this tuning space")
  812.         ]
  813.         HRESULT Step(
  814.             [in] long NewStepVal
  815.             );      
  816.     }
  817.  
  818.  
  819. //////////////////////////////////////////////////////////////////////////////////////
  820. // Tune Request Interfaces
  821. //////////////////////////////////////////////////////////////////////////////////////
  822. // tune requests(of any kind) can only be obtained from tune request factories such as 
  823. // ITuningSpace::CreateTuneRequest.  one reason for this is that we always want to be 
  824. // certain that a tune request is bound to the right tuning space.  this means we don't 
  825. // have to perform consistency checks all over the place.
  826.     [
  827.         object,
  828.         nonextensible,
  829.         uuid(07DDC146-FC3D-11d2-9D8C-00C04F72D980),
  830.         dual,
  831.         oleautomation,
  832.         helpstring("Tune Request Interface"),
  833.         pointer_default(unique)
  834.     ]
  835.     interface ITuneRequest : IDispatch
  836.     {
  837.         [propget, id(DISPID_TUNER_TR_TUNINGSPACE),
  838.             helpstring("Tuning Space object")]
  839.         HRESULT TuningSpace(
  840.             [out, retval] ITuningSpace **TuningSpace
  841.             );
  842.         [propget, id(DISPID_TUNER_TR_COMPONENTS),
  843.             helpstring("Components collection")]
  844.         HRESULT Components(
  845.             [out, retval] IComponents **Components
  846.             );
  847.         [id(DISPID_TUNER_TR_CLONE),
  848.             helpstring("Create a new copy of this tune request")]
  849.         HRESULT Clone(
  850.             [out, retval] ITuneRequest **NewTuneRequest
  851.             );
  852.         [propget, id(DISPID_TUNER_TR_LOCATOR),
  853.             helpstring("Locator Object")]
  854.         HRESULT Locator(
  855.             [out, retval] ILocator **Locator
  856.             );
  857.         [propput, id(DISPID_TUNER_TR_LOCATOR),
  858.             helpstring("Locator Object")]
  859.         HRESULT Locator(
  860.             [in] ILocator *Locator
  861.             );
  862.     }
  863.  
  864. //////////////////////////////////////////////////////////////////////////////////////
  865.     [
  866.         object,
  867.         nonextensible,
  868.         uuid(0369B4E0-45B6-11d3-B650-00C04F79498E),
  869.         dual,
  870.         oleautomation,
  871.         helpstring("Channel Tune Request Interface"),
  872.         pointer_default(unique)
  873.     ]
  874.     interface IChannelTuneRequest : ITuneRequest
  875.     {
  876.         [propget, id(DISPID_CHTUNER_CTR_CHANNEL),
  877.             helpstring("Channel")]
  878.         HRESULT Channel(
  879.             [out, retval] long *Channel
  880.             );
  881.         [propput, id(DISPID_CHTUNER_CTR_CHANNEL),
  882.             helpstring("Channel")]
  883.         HRESULT Channel(
  884.             [in] long Channel
  885.             );
  886.     }
  887.  
  888. //////////////////////////////////////////////////////////////////////////////////////
  889.     [
  890.         object,
  891.         nonextensible,
  892.         uuid(0369B4E1-45B6-11d3-B650-00C04F79498E),
  893.         dual,
  894.         oleautomation,
  895.         helpstring("ATSC Channel Tune Request Interface"),
  896.         pointer_default(unique)
  897.     ]
  898.     interface IATSCChannelTuneRequest : IChannelTuneRequest
  899.     {
  900.         [propget, id(DISPID_CHTUNER_ACTR_MINOR_CHANNEL),
  901.             helpstring("Minor Channel")]
  902.         HRESULT MinorChannel(
  903.             [out, retval] long *MinorChannel
  904.             );
  905.         [propput, id(DISPID_CHTUNER_ACTR_MINOR_CHANNEL),
  906.             helpstring("Minor Channel")]
  907.         HRESULT MinorChannel(
  908.             [in] long MinorChannel
  909.             );
  910.     }
  911.  
  912. //////////////////////////////////////////////////////////////////////////////////////
  913.     [
  914.         object,
  915.         nonextensible,
  916.         uuid(0D6F567E-A636-42bb-83BA-CE4C1704AFA2),
  917.         dual,
  918.         oleautomation,
  919.         helpstring("DVB Tune Request Interface"),
  920.         pointer_default(unique)
  921.     ]
  922.     interface IDVBTuneRequest : ITuneRequest
  923.     {
  924.         [propget, id(DISPID_DVBTUNER_ONID),
  925.             helpstring("Original Network ID")]
  926.         HRESULT ONID(
  927.             [out, retval] long *ONID
  928.             );
  929.         [propput, id(DISPID_DVBTUNER_ONID),
  930.             helpstring("Original Network ID")]
  931.         HRESULT ONID(
  932.             [in] long ONID
  933.             );
  934.         [propget, id(DISPID_DVBTUNER_TSID),
  935.             helpstring("Transport Stream ID")]
  936.         HRESULT TSID(
  937.             [out, retval] long *TSID
  938.             );
  939.         [propput, id(DISPID_DVBTUNER_TSID),
  940.             helpstring("Transport Stream ID")]
  941.         HRESULT TSID(
  942.             [in] long TSID
  943.             );
  944.         [propget, id(DISPID_DVBTUNER_SID),
  945.             helpstring("Service ID")]
  946.         HRESULT SID(
  947.             [out, retval] long *SID
  948.             );
  949.         [propput, id(DISPID_DVBTUNER_SID),
  950.             helpstring("Service ID")]
  951.         HRESULT SID(
  952.             [in] long SID
  953.             );
  954.     }
  955.  
  956. //////////////////////////////////////////////////////////////////////////////////////
  957. /// There are times(for example, reading from a file) when its useful to be able to tune
  958. /// a basic mpeg2 transport stream that contains minimal tables.  this requires the least
  959. /// common denominator mpeg2 xport stream id information
  960. /// the following tune request supplies these properties.  it can typiclly only be obtained from
  961. /// an mpeg2tunerequestfactory object. no known tune request(at this time) will return this
  962. /// from their createtunerequest() method.  in other words, this is not the "best" tune request
  963. /// for any of the current tuning spaces.
  964. //////////////////////////////////////////////////////////////////////////////////////
  965.     [
  966.         object,
  967.         nonextensible,
  968.         uuid(EB7D987F-8A01-42ad-B8AE-574DEEE44D1A),
  969.         dual,
  970.         oleautomation,
  971.         helpstring("MPEG2 Tune Request Interface"),
  972.         pointer_default(unique)
  973.     ]
  974.     interface IMPEG2TuneRequest : ITuneRequest
  975.     {
  976.         [propget, id(DISPID_MP2TUNER_TSID),
  977.             helpstring("Transport Stream ID")]
  978.         HRESULT TSID(
  979.             [out, retval] long *TSID
  980.             );
  981.         [propput, id(DISPID_MP2TUNER_TSID),
  982.             helpstring("Transport Stream ID")]
  983.         HRESULT TSID(
  984.             [in] long TSID
  985.             );
  986.         [propget, id(DISPID_MP2TUNER_PROGNO),
  987.             helpstring("Program Number ID")]
  988.         HRESULT ProgNo(
  989.             [out, retval] long *ProgNo
  990.             );
  991.         [propput, id(DISPID_MP2TUNER_PROGNO),
  992.             helpstring("Program Number ID")]
  993.         HRESULT ProgNo(
  994.             [in] long ProgNo
  995.             );
  996.     }
  997.  
  998.     [
  999.         object,
  1000.         nonextensible,
  1001.         hidden,
  1002.         uuid(14E11ABD-EE37-4893-9EA1-6964DE933E39),
  1003.         dual,
  1004.         oleautomation,
  1005.         helpstring("MPEG2 Tune Request Factory Interface"),
  1006.         pointer_default(unique)
  1007.     ]
  1008.     interface IMPEG2TuneRequestFactory : IDispatch
  1009.     {
  1010.         [id(DISPID_MP2TUNERFACTORY_CREATETUNEREQUEST),
  1011.             helpstring("Create MPEG2 Tune Request for specified tuning space(if possible)")]
  1012.         HRESULT CreateTuneRequest(
  1013.             [in] ITuningSpace *TuningSpace,
  1014.             [out, retval] IMPEG2TuneRequest **TuneRequest
  1015.             );
  1016.     }
  1017.  
  1018.     [
  1019.         object,
  1020.         hidden,
  1021.         restricted,
  1022.         nonextensible,
  1023.         uuid(1B9D5FC3-5BBC-4b6c-BB18-B9D10E3EEEBF),
  1024.         helpstring("MPEG2 Tune Request Supported Interface"),
  1025.         pointer_default(unique)
  1026.     ]
  1027.     interface IMPEG2TuneRequestSupport : IUnknown
  1028.     {
  1029.     }
  1030.  
  1031.  
  1032. //////////////////////////////////////////////////////////////////////////////////////
  1033. // Tuner Interfaces
  1034. //////////////////////////////////////////////////////////////////////////////////////
  1035.     [
  1036.         object,
  1037.         hidden,
  1038.         nonextensible,
  1039.         uuid(28C52640-018A-11d3-9D8E-00C04F72D980),
  1040.         helpstring("Tuner Interface"),
  1041.         pointer_default(unique)
  1042.     ]
  1043.     interface ITuner : IUnknown
  1044.     {
  1045.         [propget, helpstring("Tuning Space object")]
  1046.         HRESULT TuningSpace(
  1047.             [out, retval] ITuningSpace **TuningSpace
  1048.             );
  1049.  
  1050.         [propput, helpstring("Tuning Space object")]
  1051.         HRESULT TuningSpace(
  1052.             [in] ITuningSpace *TuningSpace
  1053.             );
  1054.  
  1055.         [hidden, restricted, helpstring("Returns an enumerator for Tuning Spaces accepted by this tuner")]
  1056.         HRESULT EnumTuningSpaces(
  1057.             [out, retval] IEnumTuningSpaces **ppEnum
  1058.             );
  1059.  
  1060.         [propget, helpstring("Tune Request object")]
  1061.         HRESULT TuneRequest(
  1062.             [out, retval] ITuneRequest **TuneRequest
  1063.             );
  1064.  
  1065.         [propput, helpstring("Tune Request object")]
  1066.         HRESULT TuneRequest(
  1067.             [in] ITuneRequest *TuneRequest
  1068.             );
  1069.  
  1070.         [helpstring("Validate the tuning request without tuning")]
  1071.         HRESULT Validate(
  1072.             [in] ITuneRequest *TuneRequest
  1073.             );
  1074.  
  1075.         [propget, helpstring("Preferred Component Types collection")]
  1076.         HRESULT PreferredComponentTypes(
  1077.             [out, retval] IComponentTypes **ComponentTypes
  1078.             );
  1079.  
  1080.         [propput, helpstring("Preferred Component Types collection")]
  1081.         HRESULT PreferredComponentTypes(
  1082.             [in] IComponentTypes *ComponentTypes
  1083.             );
  1084.  
  1085.         [propget, helpstring("Signal Strength")]
  1086.         HRESULT SignalStrength(
  1087.             [out, retval] long *Strength
  1088.             );
  1089.  
  1090.         [helpstring("Trigger Signal events (interval in milliseconds; 0 turns off trigger)")]
  1091.         HRESULT TriggerSignalEvents(
  1092.             [in] long Interval
  1093.             );
  1094.     }
  1095.  
  1096. //////////////////////////////////////////////////////////////////////////////////////
  1097.     [
  1098.         object,
  1099.         hidden,
  1100.         nonextensible,
  1101.         uuid(1DFD0A5C-0284-11d3-9D8E-00C04F72D980),
  1102.         helpstring("Scanning Tuner Interface"),
  1103.         pointer_default(unique)
  1104.     ]
  1105.     interface IScanningTuner : ITuner
  1106.     {
  1107.         [helpstring("Seek to the next valid selection")]
  1108.         HRESULT SeekUp(
  1109.             );
  1110.  
  1111.         [helpstring("Seek to the previous valid selection")]
  1112.         HRESULT SeekDown(
  1113.             );
  1114.  
  1115.         [helpstring("Scan for valid selections upward")]
  1116.         HRESULT ScanUp(
  1117.             [in] long MillisecondsPause
  1118.             );
  1119.  
  1120.         [helpstring("Scan for valid selections downward")]
  1121.         HRESULT ScanDown(
  1122.             [in] long MillisecondsPause
  1123.             );
  1124.  
  1125.         [helpstring("Enter the device's autoprogram mode")]
  1126.         HRESULT AutoProgram(
  1127.             );
  1128.     };
  1129.  
  1130. //////////////////////////////////////////////////////////////////////////////////////
  1131. // Component Type Interfaces
  1132. //////////////////////////////////////////////////////////////////////////////////////
  1133.  
  1134.     // Component Category
  1135.  
  1136.     [
  1137.         object,
  1138.         hidden,
  1139.         nonextensible,
  1140.         uuid(6A340DC0-0311-11d3-9D8E-00C04F72D980),
  1141.         dual,
  1142.         oleautomation,
  1143.         helpstring("Component Type Interface"),
  1144.         pointer_default(unique)
  1145.     ]
  1146.     interface IComponentType : IDispatch
  1147.     {
  1148.         [propget, id(DISPID_TUNER_CT_CATEGORY),
  1149.             helpstring("General category of component")]
  1150.         HRESULT Category(
  1151.             [out, retval] ComponentCategory *Category
  1152.             );
  1153.         [propput, id(DISPID_TUNER_CT_CATEGORY),
  1154.             helpstring("General category of component")]
  1155.         HRESULT Category(
  1156.             [in] ComponentCategory Category
  1157.             );
  1158.  
  1159.         [propget, id(DISPID_TUNER_CT_MEDIAMAJORTYPE),
  1160.             helpstring("DirectShow MediaType Major Type Guid")]
  1161.         HRESULT MediaMajorType(
  1162.             [out, retval] BSTR *MediaMajorType
  1163.             );    
  1164.         [propput, id(DISPID_TUNER_CT_MEDIAMAJORTYPE),
  1165.             helpstring("DirectShow MediaType Major Type Guid")]
  1166.         HRESULT MediaMajorType(
  1167.             [in] BSTR MediaMajorType
  1168.             );
  1169.         [propget, id(DISPID_TUNER_CT__MEDIAMAJORTYPE),
  1170.             helpstring("DirectShow MediaType Major Type Guid"), hidden, restricted]
  1171.         HRESULT _MediaMajorType(
  1172.             [out, retval] GUID* MediaMajorTypeGuid
  1173.             );
  1174.         [propput, id(DISPID_TUNER_CT__MEDIAMAJORTYPE),
  1175.             helpstring("DirectShow MediaType Major Type Guid"), hidden, restricted]
  1176.         HRESULT _MediaMajorType(
  1177.             [in] REFCLSID MediaMajorTypeGuid
  1178.             );
  1179.         [propget, id(DISPID_TUNER_CT_MEDIASUBTYPE),
  1180.             helpstring("DirectShow MediaType Sub Type Guid")]
  1181.         HRESULT MediaSubType(
  1182.             [out, retval] BSTR *MediaSubType
  1183.             );
  1184.         [propput, id(DISPID_TUNER_CT_MEDIASUBTYPE),
  1185.             helpstring("DirectShow MediaType Sub Type Guid")]
  1186.         HRESULT MediaSubType(
  1187.             [in] BSTR MediaSubType
  1188.             );
  1189.         [propget, id(DISPID_TUNER_CT__MEDIASUBTYPE),
  1190.             helpstring("DirectShow MediaType Sub Type Guid"), hidden, restricted]
  1191.         HRESULT _MediaSubType(
  1192.             [out, retval] GUID* MediaSubTypeGuid
  1193.             );
  1194.         [propput, id(DISPID_TUNER_CT__MEDIASUBTYPE),
  1195.             helpstring("DirectShow MediaType Sub Type Guid"), hidden, restricted]
  1196.         HRESULT _MediaSubType(
  1197.             [in] REFCLSID MediaSubTypeGuid
  1198.             );
  1199.         [propget, id(DISPID_TUNER_CT_MEDIAFORMATTYPE),
  1200.             helpstring("DirectShow MediaType Format Guid")]
  1201.         HRESULT MediaFormatType(
  1202.             [out, retval] BSTR *MediaFormatType
  1203.             );
  1204.         [propput, id(DISPID_TUNER_CT_MEDIAFORMATTYPE),
  1205.             helpstring("DirectShow MediaType Format Guid")]
  1206.         HRESULT MediaFormatType(
  1207.             [in] BSTR MediaFormatType
  1208.             );
  1209.         [propget, id(DISPID_TUNER_CT__MEDIAFORMATTYPE),
  1210.             helpstring("DirectShow MediaType Format Guid"), hidden, restricted]
  1211.         HRESULT _MediaFormatType(
  1212.             [out, retval] GUID* MediaFormatTypeGuid
  1213.             );
  1214.         [propput, id(DISPID_TUNER_CT__MEDIAFORMATTYPE),
  1215.             helpstring("DirectShow MediaType Format Guid"), hidden, restricted]
  1216.         HRESULT _MediaFormatType(
  1217.             [in] REFCLSID MediaFormatTypeGuid
  1218.             );
  1219.  
  1220.         [propget, id(DISPID_TUNER_CT_MEDIATYPE), hidden, restricted,
  1221.             helpstring("DirectShow MediaType Guid, this only retrieves major, sub, format guids not the entire struct")]
  1222.         HRESULT MediaType(
  1223.             [out, retval] AM_MEDIA_TYPE *MediaType
  1224.             );
  1225.         [propput, id(DISPID_TUNER_CT_MEDIATYPE), hidden, restricted,
  1226.             helpstring("DirectShow MediaType Guid, this only retrieves major, sub, format guids not the entire struct")]
  1227.         HRESULT MediaType(
  1228.             [in] AM_MEDIA_TYPE *MediaType
  1229.             );
  1230.  
  1231.         [id(DISPID_TUNER_CT_CLONE),
  1232.             helpstring("Create a copy of this component type")]
  1233.         HRESULT Clone(
  1234.             [out, retval] IComponentType **NewCT
  1235.             );
  1236.     };
  1237.  
  1238. //////////////////////////////////////////////////////////////////////////////////////
  1239.     [
  1240.         object,
  1241.         hidden,
  1242.         nonextensible,
  1243.         uuid(B874C8BA-0FA2-11d3-9D8E-00C04F72D980),
  1244.         dual,
  1245.         oleautomation,
  1246.         helpstring("Language Component Type Interface"),
  1247.         pointer_default(unique)
  1248.     ]
  1249.     interface ILanguageComponentType : IComponentType
  1250.     {
  1251.         [propget, id(DISPID_TUNER_LCT_LANGID),
  1252.             helpstring("Language Identifier for Substream Content Language")]
  1253.         HRESULT LangID(
  1254.             [out, retval] long *LangID
  1255.             );
  1256.  
  1257.         [propput, id(DISPID_TUNER_LCT_LANGID),
  1258.             helpstring("Language Identifier for Substream Content Language")]
  1259.         HRESULT LangID(
  1260.             [in] long LangID
  1261.             );
  1262.     };
  1263.  
  1264. //////////////////////////////////////////////////////////////////////////////////////
  1265.     [
  1266.         object,
  1267.         hidden,
  1268.         nonextensible,
  1269.         uuid(2C073D84-B51C-48c9-AA9F-68971E1F6E38),
  1270.         dual,
  1271.         oleautomation,
  1272.         helpstring("MPEG2 Component Type Interface"),
  1273.         pointer_default(unique)
  1274.     ]
  1275.     interface IMPEG2ComponentType : ILanguageComponentType
  1276.     {
  1277.         [propget, id(DISPID_TUNER_MP2CT_TYPE),
  1278.             helpstring("MPEG2 Stream Type")]
  1279.         HRESULT StreamType(
  1280.             [out, retval] MPEG2StreamType *MP2StreamType
  1281.             );
  1282.  
  1283.         [propput, id(DISPID_TUNER_MP2CT_TYPE),
  1284.             helpstring("MPEG2 Stream Type")]
  1285.         HRESULT StreamType(
  1286.             [in] MPEG2StreamType MP2StreamType
  1287.             );
  1288.     };
  1289.  
  1290. //////////////////////////////////////////////////////////////////////////////////////
  1291.  
  1292.     [
  1293.         object,
  1294.         hidden,
  1295.         nonextensible,
  1296.         uuid(FC189E4D-7BD4-4125-B3B3-3A76A332CC96),
  1297.         dual,
  1298.         oleautomation,
  1299.         helpstring("ATSC Component Type Interface"),
  1300.         pointer_default(unique)
  1301.     ]
  1302.     interface IATSCComponentType : IMPEG2ComponentType
  1303.     {
  1304.         [propget, id(DISPID_TUNER_ATSCCT_FLAGS),
  1305.             helpstring("ATSC Component Type Flags")]
  1306.         HRESULT Flags(
  1307.             [out, retval] long *Flags
  1308.             );
  1309.  
  1310.         [propput, id(DISPID_TUNER_ATSCCT_FLAGS),
  1311.             helpstring("ATSC Component Type Flags")]
  1312.         HRESULT Flags(
  1313.             [in] long flags
  1314.             );
  1315.     };
  1316.  
  1317. //////////////////////////////////////////////////////////////////////////////////////
  1318.     [
  1319.         hidden, restricted,
  1320.         object,
  1321.         uuid(8A674B4A-1F63-11d3-B64C-00C04F79498E),
  1322.         pointer_default(unique)
  1323.     ]
  1324.     interface IEnumComponentTypes : IUnknown
  1325.     {
  1326.         HRESULT Next(
  1327.             [in] ULONG celt,
  1328.             [out, size_is(celt), length_is(*pceltFetched)]
  1329.                 IComponentType** rgelt,
  1330.             [out] ULONG* pceltFetched
  1331.             );
  1332.  
  1333.         HRESULT Skip(
  1334.             [in] ULONG celt
  1335.             );
  1336.  
  1337.         HRESULT Reset(void);
  1338.  
  1339.         HRESULT Clone(
  1340.             [out] IEnumComponentTypes** ppEnum
  1341.             );
  1342.     }
  1343.  
  1344.  
  1345. //////////////////////////////////////////////////////////////////////////////////////
  1346. // Component Type Container
  1347. //////////////////////////////////////////////////////////////////////////////////////
  1348.  
  1349.     [
  1350.         object,
  1351.         hidden,
  1352.         nonextensible,
  1353.         uuid(0DC13D4A-0313-11d3-9D8E-00C04F72D980),
  1354.         dual,
  1355.         oleautomation,
  1356.         helpstring("ComponentType Collection Interface"),
  1357.         pointer_default(unique)
  1358.     ]
  1359.     interface IComponentTypes : IDispatch
  1360.     {
  1361.         [propget, helpstring("Number of items in the collection")]
  1362.         HRESULT Count(
  1363.             [out, retval] long *Count
  1364.             );
  1365.  
  1366.         [propget, id(DISPID_NEWENUM), hidden, restricted]
  1367.         HRESULT _NewEnum(
  1368.             [out, retval] IEnumVARIANT **ppNewEnum
  1369.             );
  1370.  
  1371.         [hidden, restricted, helpstring("Convenience Function for Use with C")]
  1372.         HRESULT EnumComponentTypes(
  1373.             [out, retval] IEnumComponentTypes **ppNewEnum
  1374.             );
  1375.  
  1376.         [id(DISPID_VALUE),
  1377.             propget,
  1378.             helpstring("Get the ComponentType at the specified index")]
  1379.         HRESULT Item(
  1380.             [in] VARIANT Index,
  1381.             [out, retval] IComponentType **ComponentType
  1382.             );
  1383.  
  1384.         [id(DISPID_VALUE),
  1385.             propput,
  1386.             helpstring("Get the ComponentType at the specified index")]
  1387.         HRESULT Item(
  1388.             [in] VARIANT Index,
  1389.             [in] IComponentType *ComponentType
  1390.             );
  1391.  
  1392.         [id(DISPID_ADDITEM), 
  1393.          helpstring("Append the ComponentType to the collection")]
  1394.         HRESULT Add(
  1395.             [in] IComponentType *ComponentType,
  1396.             [out, retval] VARIANT *NewIndex
  1397.             );
  1398.  
  1399.         [id(DISPID_REMOVEITEM), 
  1400.          helpstring("Clear the collection")]
  1401.         HRESULT Remove(
  1402.             [in] VARIANT Index
  1403.             );
  1404.  
  1405.         [helpstring("Copy the collection")]
  1406.         HRESULT Clone([out, retval] IComponentTypes **NewList);
  1407.     };
  1408.  
  1409. //////////////////////////////////////////////////////////////////////////////////////
  1410. // Component Interfaces
  1411. //////////////////////////////////////////////////////////////////////////////////////
  1412.  
  1413.     [
  1414.         object,
  1415.         nonextensible,
  1416.         uuid(1A5576FC-0E19-11d3-9D8E-00C04F72D980),
  1417.         dual,
  1418.         oleautomation,
  1419.         helpstring("Component Interface"),
  1420.         pointer_default(unique)
  1421.     ]
  1422.     interface IComponent : IDispatch
  1423.     {
  1424.         [propget, id(DISPID_TUNER_C_TYPE),
  1425.             helpstring("Component Type")]
  1426.         HRESULT Type(
  1427.             [out, retval] IComponentType** CT
  1428.             );
  1429.     
  1430.         // only loaders initialize components
  1431.         [hidden, restricted, propput, id(DISPID_TUNER_C_TYPE),
  1432.             helpstring("Component Type")]
  1433.         HRESULT Type(
  1434.             [in] IComponentType* CT
  1435.             );
  1436.  
  1437.         // NOTE: this langid is *not* the same as the langid
  1438.         // in the componenttype(if the componenttype is a languagecomponenttype)
  1439.         // the langid in the component type is the language of the content this
  1440.         // component is describing.  the following langid in the component is the
  1441.         // language of the descriptive info in the component object.
  1442.         [propget, id(DISPID_TUNER_C_LANGID),
  1443.             helpstring("Language Identifier for Description Language")]
  1444.         HRESULT DescLangID(
  1445.             [out, retval] long *LangID
  1446.             );
  1447.  
  1448.         [propput, id(DISPID_TUNER_C_LANGID),
  1449.             helpstring("Language Identifier for Description Language")]
  1450.         HRESULT DescLangID(
  1451.             [in] long LangID
  1452.             );
  1453.  
  1454.         [propget, id(DISPID_TUNER_C_STATUS),
  1455.             helpstring("Component Status")]
  1456.         HRESULT Status(
  1457.             [out, retval] ComponentStatus *Status
  1458.             );
  1459.  
  1460.         [propput, id(DISPID_TUNER_C_STATUS),
  1461.             helpstring("Component Status")]
  1462.         HRESULT Status(
  1463.             [in] ComponentStatus Status
  1464.             );
  1465.  
  1466.         [propget, id(DISPID_TUNER_C_DESCRIPTION),
  1467.             helpstring("Component Description")]
  1468.         HRESULT Description(
  1469.             [out, retval] BSTR *Description
  1470.             );
  1471.  
  1472.         // restricted: only loaders will initialize components
  1473.         [hidden, restricted, propput, id(DISPID_TUNER_C_DESCRIPTION),
  1474.             helpstring("Component Description")]
  1475.         HRESULT Description(
  1476.             [in] BSTR Description
  1477.             );
  1478.  
  1479.         [id(DISPID_TUNER_C_CLONE),
  1480.             helpstring("Copy Component")]
  1481.         HRESULT Clone(
  1482.             [out, retval] IComponent **NewComponent
  1483.             );
  1484.  
  1485.     };
  1486.  
  1487. //////////////////////////////////////////////////////////////////////////////////////
  1488.     [
  1489.         object,
  1490.         nonextensible,
  1491.         uuid(1493E353-1EB6-473c-802D-8E6B8EC9D2A9),
  1492.         dual,
  1493.         oleautomation,
  1494.         helpstring("MPEG2 Component Interface"),
  1495.         pointer_default(unique)
  1496.     ]
  1497.     interface IMPEG2Component : IComponent
  1498.     {
  1499.         [propget, id(DISPID_TUNER_C_MP2_PID),
  1500.             helpstring("MPEG2 Packet ID for this Substream")]
  1501.         HRESULT PID(
  1502.             [out, retval] long *PID
  1503.             );
  1504.  
  1505.         [propput, id(DISPID_TUNER_C_MP2_PID),
  1506.             helpstring("MPEG2 Packet ID for this Substream")]
  1507.         HRESULT PID(
  1508.             [in] long PID
  1509.             );
  1510.         [propget, id(DISPID_TUNER_C_MP2_PCRPID),
  1511.             helpstring("MPEG2 Packet ID for this Substream's Timestamps")]
  1512.         HRESULT PCRPID(
  1513.             [out, retval] long *PCRPID
  1514.             );
  1515.  
  1516.         [propput, id(DISPID_TUNER_C_MP2_PCRPID),
  1517.             helpstring("MPEG2 Packet ID for this Substream's Timestamps")]
  1518.         HRESULT PCRPID(
  1519.             [in] long PCRPID
  1520.             );
  1521.  
  1522.         // program number provides reverse lookup to PAT
  1523.         [propget, id(DISPID_TUNER_C_MP2_PROGNO),
  1524.             helpstring("MPEG2 Program Number")]
  1525.         HRESULT ProgramNumber(
  1526.             [out, retval] long *ProgramNumber
  1527.             );
  1528.  
  1529.         [propput, id(DISPID_TUNER_C_MP2_PROGNO),
  1530.             helpstring("MPEG2 Program Number")]
  1531.         HRESULT ProgramNumber(
  1532.             [in] long ProgramNumber
  1533.             );
  1534.     };
  1535.  
  1536. //////////////////////////////////////////////////////////////////////////////////////
  1537.     [
  1538.         hidden, restricted,
  1539.         object,
  1540.         uuid(2A6E2939-2595-11d3-B64C-00C04F79498E),
  1541.         pointer_default(unique)
  1542.     ]
  1543.     interface IEnumComponents : IUnknown
  1544.     {
  1545.         HRESULT Next(
  1546.             [in] ULONG celt,
  1547.             [out, size_is(celt), length_is(*pceltFetched)]
  1548.                 IComponent** rgelt,
  1549.             [out] ULONG* pceltFetched
  1550.             );
  1551.  
  1552.         HRESULT Skip(
  1553.             [in] ULONG celt
  1554.             );
  1555.  
  1556.         HRESULT Reset(void);
  1557.  
  1558.         HRESULT Clone(
  1559.             [out] IEnumComponents** ppEnum
  1560.             );
  1561.     }
  1562.  
  1563.  
  1564. //////////////////////////////////////////////////////////////////////////////////////
  1565. // Component Container
  1566. //////////////////////////////////////////////////////////////////////////////////////
  1567.  
  1568.     [
  1569.         object,
  1570.         nonextensible,
  1571.         uuid(FCD01846-0E19-11d3-9D8E-00C04F72D980),
  1572.         dual,
  1573.         oleautomation,
  1574.         helpstring("Component Collection Interface"),
  1575.         pointer_default(unique)
  1576.     ]
  1577.     interface IComponents : IDispatch
  1578.     {
  1579.         [propget, helpstring("Number of items in the collection")]
  1580.         HRESULT Count(
  1581.             [out, retval] long *Count
  1582.             );
  1583.  
  1584.         [propget, id(DISPID_NEWENUM), hidden, restricted]
  1585.         HRESULT _NewEnum(
  1586.             [out, retval] IEnumVARIANT **ppNewEnum
  1587.             );
  1588.  
  1589.         [hidden, restricted, helpstring("Convenience Function for Use with C")]
  1590.         HRESULT EnumComponents(
  1591.             [out, retval] IEnumComponents **ppNewEnum
  1592.             );
  1593.  
  1594.         [id(DISPID_VALUE),
  1595.             propget,
  1596.             helpstring("Get the Component at the specified index")]
  1597.         HRESULT Item(
  1598.             [in] VARIANT Index,
  1599.             [out, retval] IComponent **ppComponent
  1600.             );
  1601.  
  1602.         [id(DISPID_ADDITEM), 
  1603.          helpstring("Add the Component to the collection")]
  1604.         HRESULT Add(
  1605.             [in] IComponent *Component,
  1606.             [out, retval] VARIANT *NewIndex
  1607.             );
  1608.  
  1609.         [id(DISPID_REMOVEITEM), 
  1610.          helpstring("Remove the Component at the specified index")]
  1611.         HRESULT Remove(
  1612.             [in] VARIANT Index
  1613.             );
  1614.  
  1615.         [helpstring("Copy the collection")]
  1616.         HRESULT Clone([out, retval] IComponents **NewList);
  1617.     };
  1618.  
  1619. //////////////////////////////////////////////////////////////////////////////////////
  1620. // Component Container
  1621. //////////////////////////////////////////////////////////////////////////////////////
  1622. // this separates the what(general tune request properties) from the where
  1623.     
  1624.  
  1625.  
  1626.     [
  1627.         object,
  1628.         nonextensible,
  1629.         uuid(286D7F89-760C-4F89-80C4-66841D2507AA),
  1630.         dual,
  1631.         oleautomation,
  1632.         helpstring("Generic Locator Information"),
  1633.         pointer_default(unique)
  1634.     ]
  1635.     interface ILocator : IDispatch
  1636.     {
  1637.  
  1638.         [propget, id(DISPID_TUNER_L_CARRFREQ), helpstring("Carrier Frequency(DecaHertz)")]
  1639.         HRESULT CarrierFrequency(
  1640.             [out, retval] long* Frequency
  1641.             );
  1642.         [propput, id(DISPID_TUNER_L_CARRFREQ), helpstring("Carrier Frequency(DecaHertz)")]
  1643.         HRESULT CarrierFrequency(
  1644.             [in] long Frequency
  1645.             );
  1646.         [propget, id(DISPID_TUNER_L_INNERFECMETHOD), helpstring("Inner Fec Type")]
  1647.         HRESULT InnerFEC(
  1648.             [out, retval] FECMethod* FEC
  1649.             );
  1650.         [propput, id(DISPID_TUNER_L_INNERFECMETHOD), helpstring("Inner Fec Type")]
  1651.         HRESULT InnerFEC(
  1652.             [in] FECMethod FEC
  1653.             );
  1654.         [propget, id(DISPID_TUNER_L_INNERFECRATE), helpstring("Inner Fec Rate")]
  1655.         HRESULT InnerFECRate(
  1656.             [out, retval] BinaryConvolutionCodeRate* FEC
  1657.             );
  1658.         [propput, id(DISPID_TUNER_L_INNERFECRATE), helpstring("Inner Fec Rate")]
  1659.         HRESULT InnerFECRate(
  1660.             [in] BinaryConvolutionCodeRate FEC
  1661.             );
  1662.         [propget, id(DISPID_TUNER_L_OUTERFECMETHOD), helpstring("Outer Fec Type")]
  1663.         HRESULT OuterFEC(
  1664.             [out, retval] FECMethod* FEC
  1665.             );
  1666.         [propput, id(DISPID_TUNER_L_OUTERFECMETHOD), helpstring("Outer Fec Type")]
  1667.         HRESULT OuterFEC(
  1668.             [in] FECMethod FEC
  1669.             );
  1670.         [propget, id(DISPID_TUNER_L_OUTERFECRATE), helpstring("Outer Fec Rate")]
  1671.         HRESULT OuterFECRate(
  1672.             [out, retval] BinaryConvolutionCodeRate* FEC
  1673.             );
  1674.         [propput, id(DISPID_TUNER_L_OUTERFECRATE), helpstring("Outer Fec Rate")]
  1675.         HRESULT OuterFECRate(
  1676.             [in] BinaryConvolutionCodeRate FEC
  1677.             );
  1678.         [propget, id(DISPID_TUNER_L_MOD), helpstring("Modulation Type")]
  1679.         HRESULT Modulation(
  1680.             [out, retval] ModulationType* Modulation
  1681.             );
  1682.         [propput, id(DISPID_TUNER_L_MOD), helpstring("Modulation Type")]
  1683.         HRESULT Modulation(
  1684.             [in] ModulationType Modulation
  1685.             );
  1686.         [propget, id(DISPID_TUNER_L_SYMRATE), helpstring("Modulation Symbol Rate")]
  1687.         HRESULT SymbolRate(
  1688.             [out, retval] long* Rate
  1689.             );
  1690.         [propput, id(DISPID_TUNER_L_SYMRATE), helpstring("Modulation Symbol Rate")]
  1691.         HRESULT SymbolRate(
  1692.             [in] long Rate
  1693.             );
  1694.         [id(DISPID_TUNER_L_CLONE), helpstring("Copy the Locator")]
  1695.         HRESULT Clone([out, retval] ILocator **NewLocator);
  1696.     };
  1697.  
  1698. //////////////////////////////////////////////////////////////////////////////////////
  1699.     [
  1700.         object,
  1701.         hidden,
  1702.         nonextensible,
  1703.         uuid(BF8D986F-8C2B-4131-94D7-4D3D9FCC21EF),
  1704.         dual,
  1705.         oleautomation,
  1706.         helpstring("ATSC Locator Information"),
  1707.         pointer_default(unique)
  1708.     ]
  1709.     interface IATSCLocator : ILocator
  1710.     {
  1711.         [propget, id(DISPID_TUNER_L_ATSC_PHYS_CHANNEL),
  1712.             helpstring("Physical Channel")]
  1713.         HRESULT PhysicalChannel(
  1714.             [out, retval] long *PhysicalChannel
  1715.             );
  1716.         [propput, id(DISPID_TUNER_L_ATSC_PHYS_CHANNEL),
  1717.             helpstring("Physical Channel")]
  1718.         HRESULT PhysicalChannel(
  1719.             [in] long PhysicalChannel
  1720.             );
  1721.         [propget, id(DISPID_TUNER_L_ATSC_TSID),
  1722.             helpstring("Transport Stream ID")]
  1723.         HRESULT TSID(
  1724.             [out, retval] long *TSID
  1725.             );
  1726.         [propput, id(DISPID_TUNER_L_ATSC_TSID),
  1727.             helpstring("Transport Stream ID")]
  1728.         HRESULT TSID(
  1729.             [in] long TSID
  1730.             );
  1731.     };
  1732.  
  1733. //////////////////////////////////////////////////////////////////////////////////////
  1734.  
  1735.     [
  1736.         object,
  1737.         hidden,
  1738.         nonextensible,
  1739.         uuid(8664DA16-DDA2-42ac-926A-C18F9127C302),
  1740.         dual,
  1741.         oleautomation,
  1742.         helpstring("DVB Terrestrial Locator Information"),
  1743.         pointer_default(unique)
  1744.     ]
  1745.     interface IDVBTLocator : ILocator
  1746.     {
  1747.         [propget, id(DISPID_TUNER_L_DVBT_BANDWIDTH), helpstring("Bandwidth")]
  1748.         HRESULT Bandwidth(
  1749.             [out, retval] long* BandWidthVal
  1750.             );
  1751.         [propput, id(DISPID_TUNER_L_DVBT_BANDWIDTH), helpstring("Bandwidth")]
  1752.         HRESULT Bandwidth(
  1753.             [in] long BandwidthVal
  1754.             );
  1755.  
  1756.         [propget, id(DISPID_TUNER_L_DVBT_LPINNERFECMETHOD), helpstring("Inner Fec Type for Low Priority Stream")]
  1757.         HRESULT LPInnerFEC(
  1758.             [out, retval] FECMethod* FEC
  1759.             );
  1760.         [propput, id(DISPID_TUNER_L_DVBT_LPINNERFECMETHOD), helpstring("Inner Fec Type for Low Priority Stream")]
  1761.         HRESULT LPInnerFEC(
  1762.             [in] FECMethod FEC
  1763.             );
  1764.         [propget, id(DISPID_TUNER_L_DVBT_LPINNERFECRATE), helpstring("Inner Fec Rate for Low Priority Stream")]
  1765.         HRESULT LPInnerFECRate(
  1766.             [out, retval] BinaryConvolutionCodeRate* FEC
  1767.             );
  1768.         [propput, id(DISPID_TUNER_L_DVBT_LPINNERFECRATE), helpstring("Inner Fec Rate for Low Priority Stream")]
  1769.         HRESULT LPInnerFECRate(
  1770.             [in] BinaryConvolutionCodeRate FEC
  1771.             );
  1772.         [propget, id(DISPID_TUNER_L_DVBT_HALPHA), helpstring("Hierarchical Alpha")]
  1773.         HRESULT HAlpha(
  1774.             [out, retval] HierarchyAlpha* Alpha
  1775.             );
  1776.         [propput, id(DISPID_TUNER_L_DVBT_HALPHA), helpstring("Hierarchical Alpha")]
  1777.         HRESULT HAlpha(
  1778.             [in] HierarchyAlpha Alpha
  1779.             );
  1780.         [propget, id(DISPID_TUNER_L_DVBT_GUARDINTERVAL), helpstring("Guard Interval")]
  1781.         HRESULT Guard(
  1782.             [out, retval] GuardInterval* GI
  1783.             );
  1784.         [propput, id(DISPID_TUNER_L_DVBT_GUARDINTERVAL), helpstring("Guard Interval")]
  1785.         HRESULT Guard(
  1786.             [in] GuardInterval GI
  1787.             );
  1788.         [propget, id(DISPID_TUNER_L_DVBT_TRANSMISSIONMODE), helpstring("Transmission Mode")]
  1789.         HRESULT Mode(
  1790.             [out, retval] TransmissionMode* mode
  1791.             );
  1792.         [propput, id(DISPID_TUNER_L_DVBT_TRANSMISSIONMODE), helpstring("Transmission Mode")]
  1793.         HRESULT Mode(
  1794.             [in] TransmissionMode mode
  1795.             );
  1796.         [propget, id(DISPID_TUNER_L_DVBT_INUSE), helpstring("Hierarchical Alpha")]
  1797.         HRESULT OtherFrequencyInUse(
  1798.             [out, retval] VARIANT_BOOL* OtherFrequencyInUseVal
  1799.             );
  1800.         [propput, id(DISPID_TUNER_L_DVBT_INUSE), helpstring("Hierarchical Alpha")]
  1801.         HRESULT OtherFrequencyInUse(
  1802.             [in] VARIANT_BOOL OtherFrequencyInUseVal
  1803.             );
  1804.     };
  1805.  
  1806. //////////////////////////////////////////////////////////////////////////////////////
  1807.     [
  1808.         object,
  1809.         hidden,
  1810.         nonextensible,
  1811.         uuid(3D7C353C-0D04-45f1-A742-F97CC1188DC8),
  1812.         dual,
  1813.         oleautomation,
  1814.         helpstring("DVB Satellite Locator Information"),
  1815.         pointer_default(unique)
  1816.     ]
  1817.     interface IDVBSLocator : ILocator
  1818.     {
  1819.  
  1820.         [propget, id(DISPID_TUNER_L_DVBS_POLARISATION), helpstring("Signal Polarisation Type")]
  1821.         HRESULT SignalPolarisation(
  1822.             [out, retval] Polarisation* PolarisationVal
  1823.             );
  1824.         [propput, id(DISPID_TUNER_L_DVBS_POLARISATION), helpstring("Signal Polarisation Type")]
  1825.         HRESULT SignalPolarisation(
  1826.             [in] Polarisation PolarisationVal
  1827.             );
  1828.         [propget, id(DISPID_TUNER_L_DVBS_WEST), helpstring("VARIANT_TRUE means orbital position specifies west longitude")]
  1829.         HRESULT WestPosition(
  1830.             [out, retval] VARIANT_BOOL* WestLongitude
  1831.             );
  1832.         [propput, id(DISPID_TUNER_L_DVBS_WEST), helpstring("VARIANT_TRUE means orbital position specifies west longitude")]
  1833.         HRESULT WestPosition(
  1834.             [in] VARIANT_BOOL WestLongitude
  1835.             );
  1836.         [propget, id(DISPID_TUNER_L_DVBS_ORBITAL), helpstring("Longitude in tenths of a degree")]
  1837.         HRESULT OrbitalPosition(
  1838.             [out, retval] long* longitude
  1839.             );
  1840.         [propput, id(DISPID_TUNER_L_DVBS_ORBITAL), helpstring("Longitude in tenths of a degree")]
  1841.         HRESULT OrbitalPosition(
  1842.             [in] long longitude
  1843.             );
  1844.         [propget, id(DISPID_TUNER_L_DVBS_AZIMUTH), helpstring("Azimuth in tenths of a degree")]
  1845.         HRESULT Azimuth(
  1846.             [out, retval] long* Azimuth
  1847.             );
  1848.         [propput, id(DISPID_TUNER_L_DVBS_AZIMUTH), helpstring("Azimuth in tenths of a degree")]
  1849.         HRESULT Azimuth(
  1850.             [in] long Azimuth
  1851.             );
  1852.         [propget, id(DISPID_TUNER_L_DVBS_ELEVATION), helpstring("Elevation in tenths of a degree")]
  1853.         HRESULT Elevation(
  1854.             [out, retval] long* Elevation
  1855.             );
  1856.         [propput, id(DISPID_TUNER_L_DVBS_ELEVATION), helpstring("Elevation in tenths of a degree")]
  1857.         HRESULT Elevation(
  1858.             [in] long Elevation
  1859.             );
  1860.     };
  1861.  
  1862. //////////////////////////////////////////////////////////////////////////////////////
  1863.     [
  1864.         object,
  1865.         hidden,
  1866.         nonextensible,
  1867.         uuid(6E42F36E-1DD2-43c4-9F78-69D25AE39034),
  1868.         dual,
  1869.         oleautomation,
  1870.         helpstring("DVB Cable Locator Information"),
  1871.         pointer_default(unique)
  1872.     ]
  1873.     interface IDVBCLocator : ILocator
  1874.     {
  1875.     };
  1876.  
  1877. ///////////////////////////////////////////////////////////////////////////////////////
  1878. // utility interfaces
  1879. ///////////////////////////////////////////////////////////////////////////////////////
  1880.  
  1881.     [
  1882.         object,
  1883.         hidden,
  1884.         nonextensible,
  1885.         uuid(3B21263F-26E8-489d-AAC4-924F7EFD9511),
  1886.         helpstring("Broadcast Event Service Firing/Reflecting Interface"),
  1887.         pointer_default(unique)
  1888.     ]
  1889.     interface IBroadcastEvent : IUnknown
  1890.     {
  1891.         HRESULT Fire(GUID EventID);
  1892.     };
  1893.  
  1894.  
  1895. //////////////////////////////////////////////////////////////////////////////////////
  1896. //////////////////////////////////////////////////////////////////////////////////////
  1897. // TYPELIB & CoClasses
  1898. //////////////////////////////////////////////////////////////////////////////////////
  1899. //////////////////////////////////////////////////////////////////////////////////////
  1900. [
  1901.     uuid(9B085638-018E-11d3-9D8E-00C04F72D980),
  1902.     version(1.0),
  1903.     helpstring("Microsoft Tuner 1.0 Type Library")
  1904. ]
  1905. library TunerLib
  1906. {
  1907.     importlib("stdole2.tlb");
  1908.  
  1909.     // SystemTuningSpaces class
  1910.     [
  1911.         uuid(D02AAC50-027E-11d3-9D8E-00C04F72D980),
  1912.         helpstring("SystemTuningSpace Class")
  1913.     ]
  1914.     coclass SystemTuningSpaces
  1915.     {
  1916.         [default] interface ITuningSpaceContainer;
  1917.     };
  1918.  
  1919.     // NOTE: there is no object factory for this class.  the implementation for the underlying
  1920.     // code is a c++ abstract base class.  this coclass is only provided here to
  1921.     // force vb to expose the base interface to enable polymorphic access to 
  1922.     // derived objects
  1923.     [
  1924.         hidden, restricted,
  1925.         uuid(5FFDC5E6-B83A-4b55-B6E8-C69E765FE9DB),
  1926.         helpstring("dummy class to expose base tuning space i/f to VB")
  1927.     ]
  1928.     coclass TuningSpace
  1929.     {
  1930.         [default] interface ITuningSpace;
  1931.     };
  1932.  
  1933.  
  1934.     [
  1935.         uuid(A2E30750-6C3D-11d3-B653-00C04F79498E),
  1936.         helpstring("ATSC Digital Broadcast Tuning Space Class")
  1937.     ]
  1938.     coclass ATSCTuningSpace
  1939.     {
  1940.         [default] interface IATSCTuningSpace;
  1941.     };
  1942.  
  1943.     [
  1944.         uuid(8A674B4C-1F63-11d3-B64C-00C04F79498E),
  1945.         helpstring("Analog Radio Tuning Space Class")
  1946.     ]
  1947.     coclass AnalogRadioTuningSpace
  1948.     {
  1949.         [default] interface IAnalogRadioTuningSpace;
  1950.     };
  1951.  
  1952.     [
  1953.         uuid(8A674B4D-1F63-11d3-B64C-00C04F79498E),
  1954.         helpstring("Analog TV Tuning Space Class")
  1955.     ]
  1956.     coclass AnalogTVTuningSpace
  1957.     {
  1958.         [default] interface IAnalogTVTuningSpace;
  1959.     };
  1960.  
  1961.     [
  1962.         uuid(C6B14B32-76AA-4a86-A7AC-5C79AAF58DA7),
  1963.         helpstring("DVB Tuning Space Class")
  1964.     ]
  1965.     coclass DVBTuningSpace
  1966.     {
  1967.         [default] interface IDVBTuningSpace2;
  1968.         interface IDVBTuningSpace;
  1969.     };
  1970.  
  1971.     [
  1972.         uuid(B64016F3-C9A2-4066-96F0-BD9563314726),
  1973.         helpstring("DVB Satellite Tuning Space Class")
  1974.     ]
  1975.     coclass DVBSTuningSpace
  1976.     {
  1977.         [default] interface IDVBSTuningSpace;
  1978.     };
  1979.  
  1980.  
  1981.     // ComponentTypes container class
  1982.     [
  1983.         uuid(A1A2B1C4-0E3A-11d3-9D8E-00C04F72D980),
  1984.         helpstring("Component Types Collection Class")
  1985.     ]
  1986.     coclass ComponentTypes
  1987.     {
  1988.         [default] interface IComponentTypes;
  1989.     };
  1990.  
  1991.     // ComponentType class
  1992.     [
  1993.         uuid(823535A0-0318-11d3-9D8E-00C04F72D980),
  1994.         helpstring("ComponentType Class")
  1995.     ]
  1996.     coclass ComponentType
  1997.     {
  1998.         [default] interface IComponentType;
  1999.     };
  2000.  
  2001.     // Language ComponentType class
  2002.     [
  2003.         uuid(1BE49F30-0E1B-11d3-9D8E-00C04F72D980),
  2004.         helpstring("LanguageComponentType Class")
  2005.     ]
  2006.     coclass LanguageComponentType
  2007.     {
  2008.         [default] interface ILanguageComponentType;
  2009.     };
  2010.  
  2011.     // MPEG2 ComponentType class
  2012.     [
  2013.         uuid(418008F3-CF67-4668-9628-10DC52BE1D08),
  2014.         helpstring("MPEG2ComponentType Class")
  2015.     ]
  2016.     coclass MPEG2ComponentType
  2017.     {
  2018.         [default] interface IMPEG2ComponentType;
  2019.     };
  2020.  
  2021.     // ATSC ComponentType class
  2022.     [
  2023.         uuid(A8DCF3D5-0780-4ef4-8A83-2CFFAACB8ACE),
  2024.         helpstring("ATSCComponentType Class")
  2025.     ]
  2026.     coclass ATSCComponentType
  2027.     {
  2028.         [default] interface IATSCComponentType;
  2029.     };
  2030.  
  2031.     // Components class
  2032.     [
  2033.         hidden, restricted,
  2034.         uuid(809B6661-94C4-49e6-B6EC-3F0F862215AA),
  2035.         helpstring("Components Collection Class")
  2036.     ]
  2037.     coclass Components
  2038.     {
  2039.         [default] interface IComponents;
  2040.     };
  2041.  
  2042.     // Component class
  2043.     // the components can only be created by network provider/tif.  client apps
  2044.     // retrieve them from a filled-in tune request by either loading a persisted tune
  2045.     // request that has been filled in by a proper guide store loader or by re-getting
  2046.     // the current tune request property which will have this filled in by the network
  2047.     // provider
  2048.     [
  2049.         hidden, restricted,
  2050.         uuid(59DC47A8-116C-11d3-9D8E-00C04F72D980),
  2051.         helpstring("Component Class")
  2052.     ]
  2053.     coclass Component
  2054.     {
  2055.         [default] interface IComponent;
  2056.     };
  2057.  
  2058.     // MPEG2 Component class
  2059.     [
  2060.         hidden, restricted,
  2061.         uuid(055CB2D7-2969-45cd-914B-76890722F112),
  2062.         helpstring("MPEG2 Component Class")
  2063.     ]
  2064.     coclass MPEG2Component
  2065.     {
  2066.         [default] interface IMPEG2Component;
  2067.     };
  2068.  
  2069.  
  2070.     // NOTE: there is no object factory for this class.  the implementation for the underlying
  2071.     // code is a c++ abstract base class.  this coclass is only provided here to
  2072.     // force vb to expose the base interface to enable polymorphic access to 
  2073.     // derived objects
  2074.     [
  2075.         hidden, restricted,
  2076.         uuid(B46E0D38-AB35-4a06-A137-70576B01B39F),
  2077.         helpstring("dummy class to expose base tune request i/f to VB")
  2078.     ]
  2079.     coclass TuneRequest
  2080.     {
  2081.         [default] interface ITuneRequest;
  2082.     };
  2083.  
  2084.  
  2085.     // NOTE: the tuning request factories should not be invoked directly.
  2086.     // instead apps should use ITuningSpace::CreateTuningRequest to obtain a correctly
  2087.     // initialized tuning request of the appropriate type for that space.
  2088.     // the object factories are provided to allow generic code to a load a previously persisted
  2089.     // tune request object.
  2090.     [
  2091.         hidden,
  2092.         restricted,
  2093.         uuid(0369B4E5-45B6-11d3-B650-00C04F79498E),
  2094.         helpstring("Channel Tune Request")
  2095.     ]
  2096.     coclass ChannelTuneRequest
  2097.     {
  2098.         [default] interface IChannelTuneRequest;
  2099.     };
  2100.  
  2101.     [
  2102.         hidden,
  2103.         restricted,
  2104.         uuid(0369B4E6-45B6-11d3-B650-00C04F79498E),
  2105.         helpstring("ATSC Channel Tune Request")
  2106.     ]
  2107.     coclass ATSCChannelTuneRequest
  2108.     {
  2109.         [default] interface IATSCChannelTuneRequest;
  2110.     };
  2111.  
  2112.     // NOTE: there is no object factory for this class.  the implementation for the underlying
  2113.     // code is a c++ abstract base class.  this coclass is only provided here to
  2114.     // force vb to expose the base interface to enable polymorphic access to 
  2115.     // derived objects
  2116.     [
  2117.         hidden, restricted,
  2118.         uuid(0955AC62-BF2E-4cba-A2B9-A63F772D46CF),
  2119.         helpstring("dummy class to expose mpeg2 request i/f to VB")
  2120.     ]
  2121.     coclass MPEG2TuneRequest
  2122.     {
  2123.         [default] interface IMPEG2TuneRequest;
  2124.     };
  2125.  
  2126.     [
  2127.         uuid(2C63E4EB-4CEA-41b8-919C-E947EA19A77C),
  2128.         helpstring("Factory for creating IMPEG2TuneRequest")
  2129.     ]
  2130.     coclass MPEG2TuneRequestFactory
  2131.     {
  2132.         [default] interface IMPEG2TuneRequestFactory;
  2133.     };
  2134.  
  2135.  
  2136.     // NOTE: there is no object factory for this class.  the implementation for the underlying
  2137.     // code is a c++ abstract base class.  this coclass is only provided here to
  2138.     // force vb to expose the base interface to enable polymorphic access to 
  2139.     // derived objects
  2140.     [
  2141.         hidden, restricted,
  2142.         uuid(0888C883-AC4F-4943-B516-2C38D9B34562),
  2143.         helpstring("dummy class to expose base locator i/f to VB")
  2144.     ]
  2145.     coclass Locator
  2146.     {
  2147.         [default] interface ILocator;
  2148.     };
  2149.  
  2150.     // its not intended that client apps actually create locators.  the network
  2151.     // provider in combination with the transport information filter(TIF) are the 
  2152.     // only modules in the system that actually know the correct values for these objects
  2153.     // however, for testing purposes, its necessary to allow these to be created.
  2154.     // instead, normally these will simply be passed around opaquely since they're a 
  2155.     // property of the base tune request interface.
  2156.     [
  2157.         uuid(8872FF1B-98FA-4d7a-8D93-C9F1055F85BB),
  2158.         helpstring("ATSC Locator")
  2159.     ]
  2160.     coclass ATSCLocator
  2161.     {
  2162.         [default] interface IATSCLocator;
  2163.     };
  2164.  
  2165.     [
  2166.         uuid(9CD64701-BDF3-4d14-8E03-F12983D86664),
  2167.         helpstring("DVB-Terrestrial Locator")
  2168.     ]
  2169.     coclass DVBTLocator
  2170.     {
  2171.         [default] interface IDVBTLocator;
  2172.     };
  2173.  
  2174.     [
  2175.         uuid(1DF7D126-4050-47f0-A7CF-4C4CA9241333),
  2176.         helpstring("DVB-Satellite Locator")
  2177.     ]
  2178.     coclass DVBSLocator
  2179.     {
  2180.         [default] interface IDVBSLocator;
  2181.     };
  2182.  
  2183.     [
  2184.         uuid(C531D9FD-9685-4028-8B68-6E1232079F1E),
  2185.         helpstring("DVB-Cable Locator")
  2186.     ]
  2187.     coclass DVBCLocator
  2188.     {
  2189.         [default] interface ILocator;
  2190.     };
  2191.  
  2192.     [
  2193.         hidden,
  2194.         restricted,
  2195.         uuid(15D6504A-5494-499c-886C-973C9E53B9F1),
  2196.         helpstring("DVB Tune Request")
  2197.     ]
  2198.     coclass DVBTuneRequest
  2199.     {
  2200.         [default] interface IDVBTuneRequest;
  2201.     };
  2202.  
  2203. // Sample tuner class definition:
  2204. //
  2205. //  [
  2206. //      uuid(<some guid>),
  2207. //      helpstring("My Tuner object")
  2208. //  ]
  2209. //  coclass MyTuner
  2210. //  {
  2211. //      [default] interface ITuner;
  2212. //      interface IMyTunerCustomFeatureInterface;
  2213. //  };
  2214.  
  2215. ///////////////////////////////////////////////////////////////////////////////////////
  2216. // utility objects
  2217. ///////////////////////////////////////////////////////////////////////////////////////
  2218.     [
  2219.         hidden, restricted,
  2220.         uuid(8A674B49-1F63-11d3-B64C-00C04F79498E),
  2221.         helpstring("Create property bag backed by registry")
  2222.     ]
  2223.     coclass CreatePropBagOnRegKey
  2224.     {
  2225.         interface ICreatePropBagOnRegKey;
  2226.     };
  2227.  
  2228.     [
  2229.         hidden, restricted,
  2230.         uuid(0B3FFB92-0919-4934-9D5B-619C719D0202),
  2231.         helpstring("DShow Broadcast Event Service Object")
  2232.     ]
  2233.     coclass BroadcastEventService
  2234.     {
  2235.         interface IBroadcastEvent;
  2236.     };
  2237.  
  2238. cpp_quote("#define SID_SBroadcastEventService CLSID_BroadcastEventService")
  2239.     
  2240. }
  2241.  
  2242.  
  2243. /////////////////////////////////////////////////////////////////////////////
  2244. //
  2245. //  Windows XP vs. DirectX 8.0 header merge
  2246. //
  2247. //  The following is the original contents of this header from
  2248. //  the DirectX 8.0 SDK.
  2249. //
  2250. /////////////////////////////////////////////////////////////////////////////
  2251.  
  2252. #else     // DirectX 8.0 content
  2253.  
  2254.  
  2255.     interface ITuningSpaceContainer;
  2256.     interface ITuningSpace;
  2257.     interface IEnumTuningSpaces;
  2258.     interface ITuneRequest;
  2259.     interface ITuner;
  2260.     interface IScanningTuner;
  2261.     interface ITunerEvents;
  2262.     interface IEnumComponentTypes;
  2263.     interface IComponentTypes;
  2264.     interface IComponentType;
  2265.     interface ILanguageComponentType;
  2266.     interface IEnumComponents;
  2267.     interface IComponents;
  2268.     interface IComponent;
  2269.     interface IMPEG2ComponentType;
  2270.     interface IMPEG2Component;
  2271.     interface ILocator;
  2272.     interface IATSCLocator;
  2273.     interface IDVBSLocator;
  2274.     interface IDVBTLocator;
  2275.  
  2276.     // tuner.idl:
  2277.     //  interface ITuningSpaceContainer : IDispatch
  2278.     //  interface ITuningSpace : IDispatch
  2279.     //  interface ITuneRequest : IDispatch
  2280.     //  interface IComponentType : IDispatch
  2281.     //  interface ILanguageComponentType : IComponentType
  2282.     //  interface IComponentTypes : IDispatch
  2283.     //  interface IComponent : IDispatch
  2284.     //  interface IComponents : IDispatch
  2285.     //  interface ITVTuningSpace : ITuningSpace
  2286.     //  interface IFMRadioTuningSpace : ITuningSpace
  2287.     //  interface IAMRadioTuningSpace : ITuningSpace
  2288.     //  interface IAnalogTVTuningSpace : ITVTuningSpace
  2289.     //  interface IAnalogTVAudioComponent : IComponent
  2290.     //  interface IAnalogTVDataComponent : IComponent
  2291.     //  interface IChannelTuneRequest : ITuneRequest
  2292.     //  interface IDVBComponent : IComponent
  2293.     //  interface IDVBTuneRequest : ITuneRequest
  2294.  
  2295.     // DISPIDs for ITuningSpaces interface
  2296.     // we don't expect to inherit from this interface and consequently there's
  2297.     //     no chance of collision, thus we'll allow midl to auto assign ids for this one
  2298.  
  2299.     // DISPIDs for ITuningSpace interface
  2300.     enum {
  2301.     DISPID_TUNER_TS_UNIQUENAME                      = 1,
  2302.     DISPID_TUNER_TS_FRIENDLYNAME                    = 2,
  2303.     DISPID_TUNER_TS_CLSID                           = 3,
  2304.     DISPID_TUNER_TS_NETWORKTYPE                     = 4,
  2305.     DISPID_TUNER_TS__NETWORKTYPE                    = 5,
  2306.     DISPID_TUNER_TS_CREATETUNEREQUEST               = 6,
  2307.     DISPID_TUNER_TS_ENUMCATEGORYGUIDS               = 7,
  2308.     DISPID_TUNER_TS_ENUMDEVICEMONIKERS              = 8,
  2309.     DISPID_TUNER_TS_DEFAULTPREFERREDCOMPONENTTYPES  = 9,
  2310.     DISPID_TUNER_TS_FREQMAP                         = 10,
  2311.     DISPID_TUNER_TS_DEFLOCATOR                      = 11,
  2312.     DISPID_TUNER_TS_CLONE                           = 12,
  2313.  
  2314.     // DISPIDs for ITuneRequest interface
  2315.     DISPID_TUNER_TR_TUNINGSPACE                     = 1,
  2316.     DISPID_TUNER_TR_COMPONENTS                      = 2,
  2317.     DISPID_TUNER_TR_CLONE                           = 3,
  2318.     DISPID_TUNER_TR_LOCATOR                         = 4,
  2319.  
  2320.  
  2321.     // DISPID for IComponentType interface
  2322.     DISPID_TUNER_CT_CATEGORY            = 1,
  2323.     DISPID_TUNER_CT_MEDIAMAJORTYPE      = 2,
  2324.     DISPID_TUNER_CT__MEDIAMAJORTYPE     = 3,
  2325.     DISPID_TUNER_CT_MEDIASUBTYPE        = 4,
  2326.     DISPID_TUNER_CT__MEDIASUBTYPE       = 5,
  2327.     DISPID_TUNER_CT_MEDIAFORMATTYPE     = 6,
  2328.     DISPID_TUNER_CT__MEDIAFORMATTYPE    = 7,
  2329.     DISPID_TUNER_CT_MEDIATYPE           = 8,
  2330.     DISPID_TUNER_CT_CLONE               = 9,
  2331.  
  2332.  
  2333.     // DISPID for ILanguageComponentType interface
  2334.     DISPID_TUNER_LCT_LANGID                         = 100,
  2335.  
  2336.     // DISPID for IMPEG2ComponentType interface
  2337.     DISPID_TUNER_MP2CT_TYPE                         = 200,
  2338.  
  2339.     // DISPID for IATSCComponentType interface
  2340.     DISPID_TUNER_ATSCCT_FLAGS                       = 300,
  2341.  
  2342.     // DISPID for ILocator interface
  2343.     DISPID_TUNER_L_CARRFREQ                         = 1,
  2344.     DISPID_TUNER_L_INNERFECMETHOD                   = 2,
  2345.     DISPID_TUNER_L_INNERFECRATE                     = 3,
  2346.     DISPID_TUNER_L_OUTERFECMETHOD                   = 4,
  2347.     DISPID_TUNER_L_OUTERFECRATE                     = 5,
  2348.     DISPID_TUNER_L_MOD                              = 6,
  2349.     DISPID_TUNER_L_SYMRATE                          = 7,
  2350.     DISPID_TUNER_L_CLONE                            = 8,
  2351.  
  2352.     // DISPID for IATSCLocator interface
  2353.     DISPID_TUNER_L_ATSC_PHYS_CHANNEL                = 201,
  2354.     DISPID_TUNER_L_ATSC_TSID                        = 202,
  2355.  
  2356.     // DISPID for IDVBTLocator interface
  2357.     DISPID_TUNER_L_DVBT_BANDWIDTH                   = 301,
  2358.     DISPID_TUNER_L_DVBT_LPINNERFECMETHOD            = 302,
  2359.     DISPID_TUNER_L_DVBT_LPINNERFECRATE              = 303,
  2360.     DISPID_TUNER_L_DVBT_GUARDINTERVAL               = 304,
  2361.     DISPID_TUNER_L_DVBT_HALPHA                      = 305,
  2362.     DISPID_TUNER_L_DVBT_TRANSMISSIONMODE            = 306,
  2363.     DISPID_TUNER_L_DVBT_INUSE                       = 307,
  2364.  
  2365.     // DISPID for IDVBSLocator interface
  2366.     DISPID_TUNER_L_DVBS_POLARISATION                = 401,
  2367.     DISPID_TUNER_L_DVBS_WEST                        = 402,
  2368.     DISPID_TUNER_L_DVBS_ORBITAL                     = 403,
  2369.     DISPID_TUNER_L_DVBS_AZIMUTH                     = 404,
  2370.     DISPID_TUNER_L_DVBS_ELEVATION                   = 405,
  2371.  
  2372.     // DISPID for IDVBCLocator interface
  2373.  
  2374.     // DISPIDs for IComponent interface
  2375.     DISPID_TUNER_C_TYPE                             = 1,
  2376.     DISPID_TUNER_C_STATUS                           = 2,
  2377.     DISPID_TUNER_C_LANGID                           = 3,
  2378.     DISPID_TUNER_C_DESCRIPTION                      = 4,
  2379.     DISPID_TUNER_C_CLONE                            = 5,
  2380.  
  2381.     // DISPIDs for IMPEG2Component interface
  2382.     DISPID_TUNER_C_MP2_PID                          = 101,
  2383.     DISPID_TUNER_C_MP2_PCRPID                       = 102,
  2384.     DISPID_TUNER_C_MP2_PROGNO                       = 103,
  2385.  
  2386.     // DISPIDs for IDVBTuningSpace interface
  2387.     DISPID_TUNER_TS_DVB_SYSTEMTYPE                  = 101,
  2388.  
  2389.     // DISPIDs for IAnalogRadioTuningSpace interface
  2390.     DISPID_TUNER_TS_AR_MINFREQUENCY                 = 101,
  2391.     DISPID_TUNER_TS_AR_MAXFREQUENCY                 = 102,
  2392.     DISPID_TUNER_TS_AR_STEP                         = 103,
  2393.  
  2394.     // DISPIDs for IAnalogTVTuningSpace interface
  2395.     DISPID_TUNER_TS_ATV_MINCHANNEL                  = 101,
  2396.     DISPID_TUNER_TS_ATV_MAXCHANNEL                  = 102,
  2397.     DISPID_TUNER_TS_ATV_INPUTTYPE                   = 103,
  2398.     DISPID_TUNER_TS_ATV_COUNTRYCODE                 = 104,
  2399.  
  2400.     // DISPIDs for IATSCTuningSpace interface
  2401.     DISPID_TUNER_TS_ATSC_MINMINORCHANNEL            = 201,
  2402.     DISPID_TUNER_TS_ATSC_MAXMINORCHANNEL            = 202,
  2403.     DISPID_TUNER_TS_ATSC_MINPHYSCHANNEL             = 203,
  2404.     DISPID_TUNER_TS_ATSC_MAXPHYSCHANNEL             = 204,
  2405.  
  2406.     // DISPID for IAnalogTVAudioComponent interface
  2407.     DISPID_CHTUNER_ATVAC_CHANNEL                    = 101,
  2408.  
  2409.     // DISPIDs for IAnalogTVDataComponent interface
  2410.     DISPID_CHTUNER_ATVDC_SYSTEM                     = 101,
  2411.     DISPID_CHTUNER_ATVDC_CONTENT                    = 102,
  2412.  
  2413.     // DISPID for IChannelTuneRequest interface
  2414.     DISPID_CHTUNER_CTR_CHANNEL                      = 101,
  2415.  
  2416.     // DISPID IATSCChannelTuneRequest
  2417.     DISPID_CHTUNER_ACTR_MINOR_CHANNEL               = 201,
  2418.  
  2419.     // DISPIDs for IDVBComponent interface
  2420.     DISPID_DVBTUNER_DVBC_ATTRIBUTESVALID            = 101,
  2421.     DISPID_DVBTUNER_DVBC_PID                        = 102,
  2422.     DISPID_DVBTUNER_DVBC_TAG                        = 103,
  2423.     DISPID_DVBTUNER_DVBC_COMPONENTTYPE              = 104,
  2424.  
  2425.     // DISPIDs for IDVBTuneRequest interface
  2426.     DISPID_DVBTUNER_ONID         = 101,
  2427.     DISPID_DVBTUNER_TSID         = 102,
  2428.     DISPID_DVBTUNER_SID          = 103,
  2429.  
  2430.     };
  2431.  
  2432.  
  2433.     //////////////////////////////////////////////////////////////////////////////////////
  2434.     // Tuning Space Container
  2435.     //////////////////////////////////////////////////////////////////////////////////////
  2436.     // simple read-only collection of tuning spaces for enumerating subsets of the total
  2437.     // set of system tuning spaces
  2438.         [
  2439.             object,
  2440.             uuid(901284E4-33FE-4b69-8D63-634A596F3756),
  2441.             dual,
  2442.             oleautomation,
  2443.             nonextensible,
  2444.             helpstring("Tuning Space Collection Interface"),
  2445.             pointer_default(unique)
  2446.         ]
  2447.         interface ITuningSpaces : IDispatch
  2448.         {
  2449.  
  2450.             [propget, helpstring("Number of items in the collection")]
  2451.             HRESULT Count(
  2452.                 [out, retval] long *Count
  2453.                 );
  2454.  
  2455.             [propget, id(DISPID_NEWENUM), hidden, restricted]
  2456.             HRESULT _NewEnum(
  2457.                 [out, retval] IEnumVARIANT** NewEnum
  2458.                 );
  2459.  
  2460.             [id(DISPID_VALUE),
  2461.                 propget,
  2462.                 helpstring("Find the Tuning Space with the specified Index")]
  2463.             HRESULT Item(
  2464.                 [in] VARIANT varIndex,
  2465.                 [out, retval] ITuningSpace** TuningSpace
  2466.                 );
  2467.  
  2468.             [propget, hidden, restricted, 
  2469.                 helpstring("convenience function so C++ apps don't have to unpack VARIANT")]
  2470.             HRESULT EnumTuningSpaces(
  2471.                 [out, retval] IEnumTuningSpaces** NewEnum
  2472.                 );
  2473.  
  2474.         }
  2475.  
  2476.     //////////////////////////////////////////////////////////////////////////////////////
  2477.     // Tuning Space Container
  2478.     //////////////////////////////////////////////////////////////////////////////////////
  2479.         [
  2480.             object,
  2481.             uuid(5B692E84-E2F1-11d2-9493-00C04F72D980),
  2482.             dual,
  2483.             oleautomation,
  2484.             hidden,
  2485.             nonextensible,
  2486.             helpstring("Tuning Space Container Interface"),
  2487.             pointer_default(unique)
  2488.         ]
  2489.         interface ITuningSpaceContainer : IDispatch
  2490.         {
  2491.  
  2492.             [propget, helpstring("Number of items in the collection")]
  2493.             HRESULT Count(
  2494.                 [out, retval] long *Count
  2495.                 );
  2496.  
  2497.             [propget, id(DISPID_NEWENUM), hidden, restricted]
  2498.             HRESULT _NewEnum(
  2499.                 [out, retval] IEnumVARIANT** NewEnum
  2500.                 );
  2501.  
  2502.             [id(DISPID_VALUE),
  2503.                 propget,
  2504.                 helpstring("Find the Tuning Space with the specified Index")]
  2505.             HRESULT Item(
  2506.                 [in] VARIANT varIndex,
  2507.                 [out, retval] ITuningSpace** TuningSpace
  2508.                 );
  2509.             [id(DISPID_VALUE),
  2510.                 propput,
  2511.                 helpstring("Change the Tuning Space with the specified Index")]
  2512.             HRESULT Item([in] VARIANT varIndex, [in] ITuningSpace *TuningSpace);
  2513.  
  2514.             [helpstring("Returns the collection of Tuning Spaces with the same implementation")]
  2515.             HRESULT TuningSpacesForCLSID(
  2516.                 [in] BSTR SpaceCLSID,
  2517.                 [out, retval] ITuningSpaces** NewColl
  2518.                 );
  2519.  
  2520.             [hidden, restricted, 
  2521.                 helpstring("Convenience Function for enumerating from C")]
  2522.             HRESULT _TuningSpacesForCLSID(
  2523.                 [in] REFCLSID SpaceCLSID,
  2524.                 [out, retval] ITuningSpaces** NewColl
  2525.                 );
  2526.  
  2527.             [helpstring("Returns the collection of Tuning Spaces matching the name")]
  2528.             HRESULT TuningSpacesForName(
  2529.                 [in] BSTR Name,
  2530.                 [out, retval] ITuningSpaces** NewColl
  2531.                 );
  2532.  
  2533.             [helpstring("Find Local ID Number of the specified Tuning Space")]
  2534.             HRESULT FindID(
  2535.                 [in] ITuningSpace *TuningSpace,
  2536.                 [out, retval] long *ID
  2537.                 );
  2538.  
  2539.  
  2540.             [id(DISPID_ADDITEM), 
  2541.              helpstring("Add a new Tuning Space to the collection.  This tuning space will be persisted unless removed")]
  2542.             HRESULT Add(
  2543.                 [in] ITuningSpace* TuningSpace,
  2544.                 [out, retval] VARIANT* NewIndex
  2545.                 );
  2546.  
  2547.             [propget, hidden, restricted, helpstring("Convenience Function for enumerating collection from C")]
  2548.             HRESULT EnumTuningSpaces(
  2549.                 [out, retval] IEnumTuningSpaces **ppEnum
  2550.                 );
  2551.  
  2552.             [id(DISPID_REMOVEITEM), 
  2553.              helpstring("Remove a Tuning Space from the collection.  this tuning space will be deleted from the registry")]
  2554.             HRESULT Remove(
  2555.                 [in] VARIANT Index
  2556.                 );
  2557.  
  2558.             [propget, helpstring("Maximum number of items allowed in the collection")]
  2559.             HRESULT MaxCount(
  2560.                 [out, retval] long *MaxCount
  2561.                 );
  2562.  
  2563.             // we don't allow script to set this, but we do allow c code to change it.
  2564.             [propput, hidden, restricted, helpstring("Maximum number of items allowed in the collection")]
  2565.             HRESULT MaxCount(
  2566.                 [in] long MaxCount
  2567.                 );
  2568.  
  2569.         }
  2570.  
  2571.     //////////////////////////////////////////////////////////////////////////////////////
  2572.     // Tuning Space Interfaces
  2573.     //////////////////////////////////////////////////////////////////////////////////////
  2574.  
  2575.     // note: the network type is the clsid of the tuning space implementation
  2576.         [
  2577.             object,
  2578.             uuid(061C6E30-E622-11d2-9493-00C04F72D980),
  2579.             dual,
  2580.             oleautomation,
  2581.             nonextensible,
  2582.             helpstring("Tuning Space Interface"),
  2583.             pointer_default(unique)
  2584.         ]
  2585.         interface ITuningSpace : IDispatch
  2586.         {
  2587.             [propget, id(DISPID_TUNER_TS_UNIQUENAME),
  2588.                  helpstring("Unique name of the Tuning Space")]
  2589.             HRESULT UniqueName(
  2590.                 [out, retval] BSTR *Name
  2591.                 );
  2592.  
  2593.             [propput, id(DISPID_TUNER_TS_UNIQUENAME),
  2594.                  helpstring("Unique name of the Tuning Space")]
  2595.             HRESULT UniqueName(
  2596.                 [in] BSTR Name
  2597.                 );
  2598.  
  2599.             [propget, id(DISPID_TUNER_TS_FRIENDLYNAME),
  2600.                  helpstring("User-friendly name of the Tuning Space")]
  2601.             HRESULT FriendlyName(
  2602.                 [out, retval] BSTR *Name
  2603.                 );
  2604.  
  2605.             [propput, id(DISPID_TUNER_TS_FRIENDLYNAME),
  2606.                  helpstring("User-friendly name of the Tuning Space")]
  2607.             HRESULT FriendlyName(
  2608.                 [in] BSTR Name
  2609.                 );
  2610.  
  2611.             [propget, id(DISPID_TUNER_TS_CLSID), 
  2612.                 helpstring("Returns the clsid of the tuning space implementation.  provides script access to IPersist:GetClassID")]
  2613.             HRESULT CLSID(
  2614.                 [out, retval] BSTR* SpaceCLSID
  2615.                 );
  2616.  
  2617.             [propget, id(DISPID_TUNER_TS_NETWORKTYPE),
  2618.                  helpstring("Network Type (Network Proivder CLSID)")]
  2619.             HRESULT NetworkType(
  2620.                 [out, retval] BSTR *NetworkTypeGuid
  2621.                 );
  2622.             [propput, id(DISPID_TUNER_TS_NETWORKTYPE),
  2623.                  helpstring("Network Type (Network Proivder CLSID)")]
  2624.             HRESULT NetworkType(
  2625.                 [in] BSTR NetworkTypeGuid
  2626.                 );
  2627.  
  2628.             [propget, id(DISPID_TUNER_TS__NETWORKTYPE),
  2629.                  helpstring("Network Type (Network Proivder CLSID)"), hidden, restricted]
  2630.             HRESULT _NetworkType(
  2631.                 [out, retval] GUID* NetworkTypeGuid
  2632.                 );
  2633.             [propput, id(DISPID_TUNER_TS__NETWORKTYPE),
  2634.                  helpstring("Network Type (Network Proivder CLSID)"), hidden, restricted]
  2635.             HRESULT _NetworkType(
  2636.                 [in] REFCLSID NetworkTypeGuid
  2637.                 );
  2638.  
  2639.             [id(DISPID_TUNER_TS_CREATETUNEREQUEST),
  2640.                 helpstring("Create a Tune Request object")]
  2641.             HRESULT CreateTuneRequest(
  2642.                 [out, retval] ITuneRequest **TuneRequest
  2643.                 );
  2644.  
  2645.             [id(DISPID_TUNER_TS_ENUMCATEGORYGUIDS), hidden, restricted]
  2646.             HRESULT EnumCategoryGUIDs(
  2647.                 [out, retval] IEnumGUID **ppEnum
  2648.                 );
  2649.  
  2650.             [id(DISPID_TUNER_TS_ENUMDEVICEMONIKERS), hidden, restricted]
  2651.             HRESULT EnumDeviceMonikers(
  2652.                 [out, retval] IEnumMoniker **ppEnum
  2653.                 );
  2654.  
  2655.             [propget, id(DISPID_TUNER_TS_DEFAULTPREFERREDCOMPONENTTYPES)]
  2656.             HRESULT DefaultPreferredComponentTypes(
  2657.                 [out, retval] IComponentTypes** ComponentTypes
  2658.                 );
  2659.             [propput, id(DISPID_TUNER_TS_DEFAULTPREFERREDCOMPONENTTYPES)]
  2660.             HRESULT DefaultPreferredComponentTypes(
  2661.                 [in] IComponentTypes* NewComponentTypes
  2662.                 );
  2663.  
  2664.             // the following property is for the network providers to store frequency/channel maps, frequency/transponder maps
  2665.             // or whatever other mapping from carrier frequencies to frequency identifiers are appropriate for the tuning space
  2666.             // in question.  the bstr is treated as a binary blob.  it is expected to contain embedded nulls,  and it may be formatted
  2667.             // internally in whatever fashion the network provider sees fit.
  2668.             [propget, id(DISPID_TUNER_TS_FREQMAP), hidden, restricted]
  2669.             HRESULT FrequencyMapping([out, retval] BSTR *pMapping);
  2670.             [propput, id(DISPID_TUNER_TS_FREQMAP), hidden, restricted]
  2671.             HRESULT FrequencyMapping(BSTR Mapping);
  2672.  
  2673.             // the following property provides a starting point for the initial IScanningTuner after installation
  2674.             [propget, id(DISPID_TUNER_TS_DEFLOCATOR)]
  2675.             HRESULT DefaultLocator([out, retval] ILocator **LocatorVal);
  2676.             [propput, id(DISPID_TUNER_TS_DEFLOCATOR)]
  2677.             HRESULT DefaultLocator([in]ILocator *LocatorVal);
  2678.  
  2679.             HRESULT Clone([out, retval] ITuningSpace **NewTS);
  2680.         }
  2681.  
  2682.     //////////////////////////////////////////////////////////////////////////////////////
  2683.         [
  2684.             hidden,
  2685.             restricted,
  2686.             object,
  2687.             uuid(8B8EB248-FC2B-11d2-9D8C-00C04F72D980),
  2688.             pointer_default(unique)
  2689.         ]
  2690.         interface IEnumTuningSpaces : IUnknown
  2691.         {
  2692.             HRESULT Next(
  2693.                 [in] ULONG celt,
  2694.                 [out, size_is(celt), length_is(*pceltFetched)]
  2695.                     ITuningSpace** rgelt,
  2696.                 [out] ULONG* pceltFetched
  2697.                 );
  2698.  
  2699.             HRESULT Skip(
  2700.                 [in] ULONG celt
  2701.                 );
  2702.  
  2703.             HRESULT Reset(void);
  2704.  
  2705.             HRESULT Clone(
  2706.                 [out] IEnumTuningSpaces** ppEnum
  2707.                 );
  2708.         }
  2709.  
  2710.     //////////////////////////////////////////////////////////////////////////////////////
  2711.         [
  2712.             object,
  2713.             hidden,
  2714.             nonextensible,
  2715.             uuid(ADA0B268-3B19-4e5b-ACC4-49F852BE13BA),
  2716.             pointer_default(unique)
  2717.         ]
  2718.         interface IDVBTuningSpace : ITuningSpace
  2719.         {
  2720.             [propget, id(DISPID_TUNER_TS_DVB_SYSTEMTYPE),
  2721.              helpstring("Type of DVB System")
  2722.             ]
  2723.             HRESULT SystemType(
  2724.                 [out, retval] DVBSystemType *SysType
  2725.                 );
  2726.             [propput, id(DISPID_TUNER_TS_DVB_SYSTEMTYPE),
  2727.              helpstring("Type of DVB System")
  2728.             ]
  2729.             HRESULT SystemType(
  2730.                 [in] DVBSystemType SysType
  2731.                 );
  2732.  
  2733.         }
  2734.  
  2735.  
  2736.     //////////////////////////////////////////////////////////////////////////////////////
  2737.         [
  2738.             object,
  2739.             hidden,
  2740.             nonextensible,
  2741.             uuid(2A6E293C-2595-11d3-B64C-00C04F79498E),
  2742.             pointer_default(unique)
  2743.         ]
  2744.         interface IAnalogTVTuningSpace : ITuningSpace
  2745.         {
  2746.             [propget, id(DISPID_TUNER_TS_ATV_MINCHANNEL),
  2747.              helpstring("Smallest channel number ever provided by this tuning space")
  2748.             ]
  2749.             HRESULT MinChannel(
  2750.                 [out, retval] long *MinChannelVal
  2751.                 );
  2752.             [propput, id(DISPID_TUNER_TS_ATV_MINCHANNEL),
  2753.              helpstring("Smallest channel number ever provided by this tuning space")
  2754.             ]
  2755.             HRESULT MinChannel(
  2756.                 [in] long NewMinChannelVal
  2757.                 );
  2758.             [propget, id(DISPID_TUNER_TS_ATV_MAXCHANNEL),
  2759.              helpstring("Largest channel number ever provided by this tuning space")
  2760.             ]
  2761.             HRESULT MaxChannel(
  2762.                 [out, retval] long *MaxChannelVal
  2763.                 );
  2764.             [propput, id(DISPID_TUNER_TS_ATV_MAXCHANNEL),
  2765.              helpstring("Largest channel number ever provided by this tuning space")
  2766.             ]
  2767.             HRESULT MaxChannel(
  2768.                 [in] long NewMaxChannelVal
  2769.                 );
  2770.             [propget, id(DISPID_TUNER_TS_ATV_INPUTTYPE),
  2771.              helpstring("Input type for this tuning space")
  2772.             ]
  2773.             HRESULT InputType([out, retval] TunerInputType *InputTypeVal);
  2774.             [propput, id(DISPID_TUNER_TS_ATV_INPUTTYPE),
  2775.              helpstring("Input type for this tuning space")
  2776.             ]
  2777.             HRESULT InputType([in] TunerInputType NewInputTypeVal);
  2778.             [propget, id(DISPID_TUNER_TS_ATV_COUNTRYCODE),
  2779.              helpstring("International dialing prefix for country of physical broadcast source")
  2780.             ]
  2781.             HRESULT CountryCode([out, retval] long *CountryCodeVal);
  2782.             [propput, id(DISPID_TUNER_TS_ATV_COUNTRYCODE),
  2783.              helpstring("International dialing prefix for country of physical broadcast source")
  2784.             ]
  2785.             HRESULT CountryCode([in] long NewCountryCodeVal);
  2786.         }
  2787.  
  2788.     //////////////////////////////////////////////////////////////////////////////////////
  2789.         [
  2790.             object,
  2791.             hidden,
  2792.             nonextensible,
  2793.             uuid(0369B4E2-45B6-11d3-B650-00C04F79498E),
  2794.             pointer_default(unique)
  2795.         ]
  2796.     // note: we inherit ATSC from analog because we need the same properties.
  2797.     // - the definition of channel is overloaded to be the major channel,
  2798.     // - input type allows us to distinguish between broadcast and cable frequencies
  2799.     // which allows us to use the atsc tuning space class for "open cable".
  2800.     // - country code will allow us to redefine physical channel frequencies
  2801.     // if any other countries adopt ATSC which may happen in Latin America in particular.
  2802.         interface IATSCTuningSpace : IAnalogTVTuningSpace
  2803.         {
  2804.             [propget, id(DISPID_TUNER_TS_ATSC_MINMINORCHANNEL),
  2805.              helpstring("Smallest minor channel number ever provided by this tuning space")
  2806.             ]
  2807.             HRESULT MinMinorChannel(
  2808.                 [out, retval] long *MinMinorChannelVal
  2809.                 );
  2810.             [propput, id(DISPID_TUNER_TS_ATSC_MINMINORCHANNEL),
  2811.              helpstring("Smallest minor channel number ever provided by this tuning space")
  2812.             ]
  2813.             HRESULT MinMinorChannel(
  2814.                 [in] long NewMinMinorChannelVal
  2815.                 );
  2816.             [propget, id(DISPID_TUNER_TS_ATSC_MAXMINORCHANNEL),
  2817.              helpstring("Largest minor channel number ever provided by this tuning space")
  2818.             ]
  2819.             HRESULT MaxMinorChannel(
  2820.                 [out, retval] long *MaxMinorChannelVal
  2821.                 );
  2822.             [propput, id(DISPID_TUNER_TS_ATSC_MAXMINORCHANNEL),
  2823.              helpstring("Largest minor channel number ever provided by this tuning space")
  2824.             ]
  2825.             HRESULT MaxMinorChannel(
  2826.                 [in] long NewMaxMinorChannelVal
  2827.                 );
  2828.             [propget, id(DISPID_TUNER_TS_ATSC_MINPHYSCHANNEL),
  2829.              helpstring("Smallest physical channel number ever provided by this tuning space")
  2830.             ]
  2831.             HRESULT MinPhysicalChannel(
  2832.                 [out, retval] long *MinPhysicalChannelVal
  2833.                 );
  2834.             [propput, id(DISPID_TUNER_TS_ATSC_MINPHYSCHANNEL),
  2835.              helpstring("Smallest physical channel number ever provided by this tuning space")
  2836.             ]
  2837.             HRESULT MinPhysicalChannel(
  2838.                 [in] long NewMinPhysicalChannelVal
  2839.                 );
  2840.             [propget, id(DISPID_TUNER_TS_ATSC_MAXPHYSCHANNEL),
  2841.              helpstring("Largest physical channel number ever provided by this tuning space")
  2842.             ]
  2843.             HRESULT MaxPhysicalChannel(
  2844.                 [out, retval] long *MaxPhysicalChannelVal
  2845.                 );
  2846.             [propput, id(DISPID_TUNER_TS_ATSC_MAXPHYSCHANNEL),
  2847.              helpstring("Largest physical channel number ever provided by this tuning space")
  2848.             ]
  2849.             HRESULT MaxPhysicalChannel(
  2850.                 [in] long NewMaxPhysicalChannelVal
  2851.                 );
  2852.  
  2853.         }
  2854.  
  2855.     //////////////////////////////////////////////////////////////////////////////////////
  2856.         [
  2857.             object,
  2858.             hidden,
  2859.             nonextensible,
  2860.             uuid(2A6E293B-2595-11d3-B64C-00C04F79498E),
  2861.             pointer_default(unique)
  2862.         ]
  2863.         interface IAnalogRadioTuningSpace : ITuningSpace {
  2864.             [propget, id(DISPID_TUNER_TS_AR_MINFREQUENCY),
  2865.              helpstring("Smallest frequency(khz) ever used by this tuning space")
  2866.             ]
  2867.             HRESULT MinFrequency(
  2868.                 [out, retval] long *MinFrequencyVal
  2869.                 );
  2870.             [propput, id(DISPID_TUNER_TS_AR_MINFREQUENCY),
  2871.              helpstring("Smallest frequency(khz) ever used by this tuning space")
  2872.             ]
  2873.             HRESULT MinFrequency(
  2874.                 [in] long NewMinFrequencyVal
  2875.                 );
  2876.             [propget, id(DISPID_TUNER_TS_AR_MAXFREQUENCY),
  2877.              helpstring("Largest frequency(khz) ever used by this tuning space")
  2878.             ]
  2879.             HRESULT MaxFrequency(
  2880.                 [out, retval] long *MaxFrequencyVal
  2881.                 );
  2882.             [propput, id(DISPID_TUNER_TS_AR_MAXFREQUENCY),
  2883.              helpstring("Largest frequency(khz) ever used by this tuning space")
  2884.             ]
  2885.             HRESULT MaxFrequency(
  2886.                 [in] long NewMaxFrequencyVal
  2887.                 );
  2888.             [propget, id(DISPID_TUNER_TS_AR_STEP),
  2889.              helpstring("Default step value(khz) to next frequency for this tuning space")
  2890.             ]
  2891.             HRESULT Step(
  2892.                 [out, retval] long *StepVal
  2893.                 );
  2894.             [propput, id(DISPID_TUNER_TS_AR_STEP),
  2895.              helpstring("Default step value(khz) to next frequency for this tuning space")
  2896.             ]
  2897.             HRESULT Step(
  2898.                 [in] long NewStepVal
  2899.                 );      
  2900.         }
  2901.  
  2902.  
  2903.     //////////////////////////////////////////////////////////////////////////////////////
  2904.     // Tune Request Interfaces
  2905.     //////////////////////////////////////////////////////////////////////////////////////
  2906.         [
  2907.             object,
  2908.             nonextensible,
  2909.             uuid(07DDC146-FC3D-11d2-9D8C-00C04F72D980),
  2910.             dual,
  2911.             oleautomation,
  2912.             helpstring("Tune Request Interface"),
  2913.             pointer_default(unique)
  2914.         ]
  2915.         interface ITuneRequest : IDispatch
  2916.         {
  2917.             [propget, id(DISPID_TUNER_TR_TUNINGSPACE),
  2918.                 helpstring("Tuning Space object")]
  2919.             HRESULT TuningSpace(
  2920.                 [out, retval] ITuningSpace **TuningSpace
  2921.                 );
  2922.             [propget, id(DISPID_TUNER_TR_COMPONENTS),
  2923.                 helpstring("Components collection")]
  2924.             HRESULT Components(
  2925.                 [out, retval] IComponents **Components
  2926.                 );
  2927.             [id(DISPID_TUNER_TR_CLONE),
  2928.                 helpstring("Create a new copy of this tune request")]
  2929.             HRESULT Clone(
  2930.                 [out, retval] ITuneRequest **NewTuneRequest
  2931.                 );
  2932.             [propget, id(DISPID_TUNER_TR_LOCATOR),
  2933.                 helpstring("Locator Object")]
  2934.             HRESULT Locator(
  2935.                 [out, retval] ILocator **Locator
  2936.                 );
  2937.             [propput, id(DISPID_TUNER_TR_LOCATOR),
  2938.                 helpstring("Locator Object")]
  2939.             HRESULT Locator(
  2940.                 [in] ILocator *Locator
  2941.                 );
  2942.         }
  2943.  
  2944.     //////////////////////////////////////////////////////////////////////////////////////
  2945.         [
  2946.             object,
  2947.             nonextensible,
  2948.             uuid(0369B4E0-45B6-11d3-B650-00C04F79498E),
  2949.             dual,
  2950.             oleautomation,
  2951.             helpstring("Channel Tune Request Interface"),
  2952.             pointer_default(unique)
  2953.         ]
  2954.         interface IChannelTuneRequest : ITuneRequest
  2955.         {
  2956.             [propget, id(DISPID_CHTUNER_CTR_CHANNEL),
  2957.                 helpstring("Channel")]
  2958.             HRESULT Channel(
  2959.                 [out, retval] long *Channel
  2960.                 );
  2961.             [propput, id(DISPID_CHTUNER_CTR_CHANNEL),
  2962.                 helpstring("Channel")]
  2963.             HRESULT Channel(
  2964.                 [in] long Channel
  2965.                 );
  2966.         }
  2967.  
  2968.     //////////////////////////////////////////////////////////////////////////////////////
  2969.         [
  2970.             object,
  2971.             nonextensible,
  2972.             uuid(0369B4E1-45B6-11d3-B650-00C04F79498E),
  2973.             dual,
  2974.             oleautomation,
  2975.             helpstring("ATSC Channel Tune Request Interface"),
  2976.             pointer_default(unique)
  2977.         ]
  2978.         interface IATSCChannelTuneRequest : IChannelTuneRequest
  2979.         {
  2980.             [propget, id(DISPID_CHTUNER_ACTR_MINOR_CHANNEL),
  2981.                 helpstring("Minor Channel")]
  2982.             HRESULT MinorChannel(
  2983.                 [out, retval] long *MinorChannel
  2984.                 );
  2985.             [propput, id(DISPID_CHTUNER_ACTR_MINOR_CHANNEL),
  2986.                 helpstring("Minor Channel")]
  2987.             HRESULT MinorChannel(
  2988.                 [in] long MinorChannel
  2989.                 );
  2990.         }
  2991.  
  2992.     //////////////////////////////////////////////////////////////////////////////////////
  2993.         [
  2994.             object,
  2995.             nonextensible,
  2996.             uuid(0D6F567E-A636-42bb-83BA-CE4C1704AFA2),
  2997.             dual,
  2998.             oleautomation,
  2999.             helpstring("DVB Tune Request Interface"),
  3000.             pointer_default(unique)
  3001.         ]
  3002.         interface IDVBTuneRequest : ITuneRequest
  3003.         {
  3004.             [propget, id(DISPID_DVBTUNER_ONID),
  3005.                 helpstring("Original Network ID")]
  3006.             HRESULT ONID(
  3007.                 [out, retval] long *ONID
  3008.                 );
  3009.             [propput, id(DISPID_DVBTUNER_ONID),
  3010.                 helpstring("Original Network ID")]
  3011.             HRESULT ONID(
  3012.                 [in] long ONID
  3013.                 );
  3014.             [propget, id(DISPID_DVBTUNER_TSID),
  3015.                 helpstring("Transport Stream ID")]
  3016.             HRESULT TSID(
  3017.                 [out, retval] long *TSID
  3018.                 );
  3019.             [propput, id(DISPID_DVBTUNER_TSID),
  3020.                 helpstring("Transport Stream ID")]
  3021.             HRESULT TSID(
  3022.                 [in] long TSID
  3023.                 );
  3024.             [propget, id(DISPID_DVBTUNER_SID),
  3025.                 helpstring("Service ID")]
  3026.             HRESULT SID(
  3027.                 [out, retval] long *SID
  3028.                 );
  3029.             [propput, id(DISPID_DVBTUNER_SID),
  3030.                 helpstring("Service ID")]
  3031.             HRESULT SID(
  3032.                 [in] long SID
  3033.                 );
  3034.         }
  3035.  
  3036.     //////////////////////////////////////////////////////////////////////////////////////
  3037.     // Tuner Interfaces
  3038.     //////////////////////////////////////////////////////////////////////////////////////
  3039.         [
  3040.             object,
  3041.             hidden,
  3042.             nonextensible,
  3043.             uuid(28C52640-018A-11d3-9D8E-00C04F72D980),
  3044.             helpstring("Tuner Interface"),
  3045.             pointer_default(unique)
  3046.         ]
  3047.         interface ITuner : IUnknown
  3048.         {
  3049.             [propget, helpstring("Tuning Space object")]
  3050.             HRESULT TuningSpace(
  3051.                 [out, retval] ITuningSpace **TuningSpace
  3052.                 );
  3053.  
  3054.             [propput, helpstring("Tuning Space object")]
  3055.             HRESULT TuningSpace(
  3056.                 [in] ITuningSpace *TuningSpace
  3057.                 );
  3058.  
  3059.             [hidden, restricted, helpstring("Returns an enumerator for Tuning Spaces accepted by this tuner")]
  3060.             HRESULT EnumTuningSpaces(
  3061.                 [out, retval] IEnumTuningSpaces **ppEnum
  3062.                 );
  3063.  
  3064.             [propget, helpstring("Tune Request object")]
  3065.             HRESULT TuneRequest(
  3066.                 [out, retval] ITuneRequest **TuneRequest
  3067.                 );
  3068.  
  3069.             [propput, helpstring("Tune Request object")]
  3070.             HRESULT TuneRequest(
  3071.                 [in] ITuneRequest *TuneRequest
  3072.                 );
  3073.  
  3074.             [helpstring("Validate the tuning request without tuning")]
  3075.             HRESULT Validate(
  3076.                 [in] ITuneRequest *TuneRequest
  3077.                 );
  3078.  
  3079.             [propget, helpstring("Preferred Component Types collection")]
  3080.             HRESULT PreferredComponentTypes(
  3081.                 [out, retval] IComponentTypes **ComponentTypes
  3082.                 );
  3083.  
  3084.             [propput, helpstring("Preferred Component Types collection")]
  3085.             HRESULT PreferredComponentTypes(
  3086.                 [in] IComponentTypes *ComponentTypes
  3087.                 );
  3088.  
  3089.             [propget, helpstring("Signal Strength")]
  3090.             HRESULT SignalStrength(
  3091.                 [out, retval] long *Strength
  3092.                 );
  3093.  
  3094.             [helpstring("Trigger Signal events (interval in milliseconds; 0 turns off trigger)")]
  3095.             HRESULT TriggerSignalEvents(
  3096.                 [in] long Interval
  3097.                 );
  3098.         }
  3099.  
  3100.     //////////////////////////////////////////////////////////////////////////////////////
  3101.         [
  3102.             object,
  3103.             hidden,
  3104.             nonextensible,
  3105.             uuid(1DFD0A5C-0284-11d3-9D8E-00C04F72D980),
  3106.             helpstring("Scanning Tuner Interface"),
  3107.             pointer_default(unique)
  3108.         ]
  3109.         interface IScanningTuner : ITuner
  3110.         {
  3111.             [helpstring("Seek to the next valid selection")]
  3112.             HRESULT SeekUp(
  3113.                 );
  3114.  
  3115.             [helpstring("Seek to the previous valid selection")]
  3116.             HRESULT SeekDown(
  3117.                 );
  3118.  
  3119.             [helpstring("Scan for valid selections upward")]
  3120.             HRESULT ScanUp(
  3121.                 [in] long MillisecondsPause
  3122.                 );
  3123.  
  3124.             [helpstring("Scan for valid selections downward")]
  3125.             HRESULT ScanDown(
  3126.                 [in] long MillisecondsPause
  3127.                 );
  3128.  
  3129.             [helpstring("Enter the device's autoprogram mode")]
  3130.             HRESULT AutoProgram(
  3131.                 );
  3132.         };
  3133.  
  3134.     //////////////////////////////////////////////////////////////////////////////////////
  3135.         [
  3136.             object,
  3137.             hidden,
  3138.             nonextensible,
  3139.             uuid(68481420-0280-11d3-9D8E-00C04F72D980),
  3140.             helpstring("Tuner Events Interface"),
  3141.             pointer_default(unique)
  3142.         ]
  3143.         interface ITunerEvents : IUnknown
  3144.         {
  3145.             [helpstring("Reports a completed (or failed) tune operation")]
  3146.             HRESULT OnTune(
  3147.                 [in] ITuneRequest **Request,
  3148.                 [in] long *Strength
  3149.                 );
  3150.         }
  3151.  
  3152.     //////////////////////////////////////////////////////////////////////////////////////
  3153.         [
  3154.             object,
  3155.             hidden,
  3156.             nonextensible,
  3157.             uuid(85E2439E-0E23-11d3-9D8E-00C04F72D980),
  3158.             helpstring("Signal Events Interface"),
  3159.             pointer_default(unique)
  3160.         ]
  3161.         interface ISignalEvents : IUnknown
  3162.         {
  3163.             [helpstring("Reports the signal strength")]
  3164.             HRESULT OnSignal(
  3165.                 [out] long *Strength
  3166.                 );
  3167.         }
  3168.  
  3169.     //////////////////////////////////////////////////////////////////////////////////////
  3170.     // Component Type Interfaces
  3171.     //////////////////////////////////////////////////////////////////////////////////////
  3172.  
  3173.         // Component Category
  3174.  
  3175.         [
  3176.             object,
  3177.             hidden,
  3178.             nonextensible,
  3179.             uuid(6A340DC0-0311-11d3-9D8E-00C04F72D980),
  3180.             dual,
  3181.             oleautomation,
  3182.             helpstring("Component Type Interface"),
  3183.             pointer_default(unique)
  3184.         ]
  3185.         interface IComponentType : IDispatch
  3186.         {
  3187.             [propget, id(DISPID_TUNER_CT_CATEGORY),
  3188.                 helpstring("General category of component")]
  3189.             HRESULT Category(
  3190.                 [out, retval] ComponentCategory *Category
  3191.                 );
  3192.             [propput, id(DISPID_TUNER_CT_CATEGORY),
  3193.                 helpstring("General category of component")]
  3194.             HRESULT Category(
  3195.                 [in] ComponentCategory Category
  3196.                 );
  3197.  
  3198.             [propget, id(DISPID_TUNER_CT_MEDIAMAJORTYPE),
  3199.                 helpstring("DirectShow MediaType Major Type Guid")]
  3200.             HRESULT MediaMajorType(
  3201.                 [out, retval] BSTR *MediaMajorType
  3202.                 );    
  3203.             [propput, id(DISPID_TUNER_CT_MEDIAMAJORTYPE),
  3204.                 helpstring("DirectShow MediaType Major Type Guid")]
  3205.             HRESULT MediaMajorType(
  3206.                 [in] BSTR MediaMajorType
  3207.                 );
  3208.             [propget, id(DISPID_TUNER_CT__MEDIAMAJORTYPE),
  3209.                 helpstring("DirectShow MediaType Major Type Guid"), hidden, restricted]
  3210.             HRESULT _MediaMajorType(
  3211.                 [out, retval] GUID* MediaMajorTypeGuid
  3212.                 );
  3213.             [propput, id(DISPID_TUNER_CT__MEDIAMAJORTYPE),
  3214.                 helpstring("DirectShow MediaType Major Type Guid"), hidden, restricted]
  3215.             HRESULT _MediaMajorType(
  3216.                 [in] REFCLSID MediaMajorTypeGuid
  3217.                 );
  3218.             [propget, id(DISPID_TUNER_CT_MEDIASUBTYPE),
  3219.                 helpstring("DirectShow MediaType Sub Type Guid")]
  3220.             HRESULT MediaSubType(
  3221.                 [out, retval] BSTR *MediaSubType
  3222.                 );
  3223.             [propput, id(DISPID_TUNER_CT_MEDIASUBTYPE),
  3224.                 helpstring("DirectShow MediaType Sub Type Guid")]
  3225.             HRESULT MediaSubType(
  3226.                 [in] BSTR MediaSubType
  3227.                 );
  3228.             [propget, id(DISPID_TUNER_CT__MEDIASUBTYPE),
  3229.                 helpstring("DirectShow MediaType Sub Type Guid"), hidden, restricted]
  3230.             HRESULT _MediaSubType(
  3231.                 [out, retval] GUID* MediaSubTypeGuid
  3232.                 );
  3233.             [propput, id(DISPID_TUNER_CT__MEDIASUBTYPE),
  3234.                 helpstring("DirectShow MediaType Sub Type Guid"), hidden, restricted]
  3235.             HRESULT _MediaSubType(
  3236.                 [in] REFCLSID MediaSubTypeGuid
  3237.                 );
  3238.             [propget, id(DISPID_TUNER_CT_MEDIAFORMATTYPE),
  3239.                 helpstring("DirectShow MediaType Format Guid")]
  3240.             HRESULT MediaFormatType(
  3241.                 [out, retval] BSTR *MediaFormatType
  3242.                 );
  3243.             [propput, id(DISPID_TUNER_CT_MEDIAFORMATTYPE),
  3244.                 helpstring("DirectShow MediaType Format Guid")]
  3245.             HRESULT MediaFormatType(
  3246.                 [in] BSTR MediaFormatType
  3247.                 );
  3248.             [propget, id(DISPID_TUNER_CT__MEDIAFORMATTYPE),
  3249.                 helpstring("DirectShow MediaType Format Guid"), hidden, restricted]
  3250.             HRESULT _MediaFormatType(
  3251.                 [out, retval] GUID* MediaFormatTypeGuid
  3252.                 );
  3253.             [propput, id(DISPID_TUNER_CT__MEDIAFORMATTYPE),
  3254.                 helpstring("DirectShow MediaType Format Guid"), hidden, restricted]
  3255.             HRESULT _MediaFormatType(
  3256.                 [in] REFCLSID MediaFormatTypeGuid
  3257.                 );
  3258.  
  3259.             [propget, id(DISPID_TUNER_CT_MEDIATYPE), hidden, restricted,
  3260.                 helpstring("DirectShow MediaType Guid, this only retrieves major, sub, format guids not the entire struct")]
  3261.             HRESULT MediaType(
  3262.                 [out, retval] AM_MEDIA_TYPE *MediaType
  3263.                 );
  3264.             [propput, id(DISPID_TUNER_CT_MEDIATYPE), hidden, restricted,
  3265.                 helpstring("DirectShow MediaType Guid, this only retrieves major, sub, format guids not the entire struct")]
  3266.             HRESULT MediaType(
  3267.                 [in] AM_MEDIA_TYPE *MediaType
  3268.                 );
  3269.  
  3270.             [id(DISPID_TUNER_CT_CLONE),
  3271.                 helpstring("Create a copy of this component type")]
  3272.             HRESULT Clone(
  3273.                 [out, retval] IComponentType **NewCT
  3274.                 );
  3275.         };
  3276.  
  3277.     //////////////////////////////////////////////////////////////////////////////////////
  3278.         [
  3279.             object,
  3280.             hidden,
  3281.             nonextensible,
  3282.             uuid(B874C8BA-0FA2-11d3-9D8E-00C04F72D980),
  3283.             dual,
  3284.             oleautomation,
  3285.             helpstring("Language Component Type Interface"),
  3286.             pointer_default(unique)
  3287.         ]
  3288.         interface ILanguageComponentType : IComponentType
  3289.         {
  3290.             [propget, id(DISPID_TUNER_LCT_LANGID),
  3291.                 helpstring("Language Identifier for Substream Content Language")]
  3292.             HRESULT LangID(
  3293.                 [out, retval] long *LangID
  3294.                 );
  3295.  
  3296.             [propput, id(DISPID_TUNER_LCT_LANGID),
  3297.                 helpstring("Language Identifier for Substream Content Language")]
  3298.             HRESULT LangID(
  3299.                 [in] long LangID
  3300.                 );
  3301.         };
  3302.  
  3303.     //////////////////////////////////////////////////////////////////////////////////////
  3304.         [
  3305.             object,
  3306.             hidden,
  3307.             nonextensible,
  3308.             uuid(2C073D84-B51C-48c9-AA9F-68971E1F6E38),
  3309.             dual,
  3310.             oleautomation,
  3311.             helpstring("MPEG2 Component Type Interface"),
  3312.             pointer_default(unique)
  3313.         ]
  3314.         interface IMPEG2ComponentType : ILanguageComponentType
  3315.         {
  3316.             [propget, id(DISPID_TUNER_MP2CT_TYPE),
  3317.                 helpstring("MPEG2 Stream Type")]
  3318.             HRESULT StreamType(
  3319.                 [out, retval] MPEG2StreamType *MP2StreamType
  3320.                 );
  3321.  
  3322.             [propput, id(DISPID_TUNER_MP2CT_TYPE),
  3323.                 helpstring("MPEG2 Stream Type")]
  3324.             HRESULT StreamType(
  3325.                 [in] MPEG2StreamType MP2StreamType
  3326.                 );
  3327.         };
  3328.  
  3329.     //////////////////////////////////////////////////////////////////////////////////////
  3330.  
  3331.         [
  3332.             object,
  3333.             hidden,
  3334.             nonextensible,
  3335.             uuid(FC189E4D-7BD4-4125-B3B3-3A76A332CC96),
  3336.             dual,
  3337.             oleautomation,
  3338.             helpstring("ATSC Component Type Interface"),
  3339.             pointer_default(unique)
  3340.         ]
  3341.         interface IATSCComponentType : IMPEG2ComponentType
  3342.         {
  3343.             [propget, id(DISPID_TUNER_ATSCCT_FLAGS),
  3344.                 helpstring("ATSC Component Type Flags")]
  3345.             HRESULT Flags(
  3346.                 [out, retval] long *Flags
  3347.                 );
  3348.  
  3349.             [propput, id(DISPID_TUNER_ATSCCT_FLAGS),
  3350.                 helpstring("ATSC Component Type Flags")]
  3351.             HRESULT Flags(
  3352.                 [in] long flags
  3353.                 );
  3354.         };
  3355.  
  3356.     //////////////////////////////////////////////////////////////////////////////////////
  3357.         [
  3358.             hidden, restricted,
  3359.             object,
  3360.             uuid(8A674B4A-1F63-11d3-B64C-00C04F79498E),
  3361.             pointer_default(unique)
  3362.         ]
  3363.         interface IEnumComponentTypes : IUnknown
  3364.         {
  3365.             HRESULT Next(
  3366.                 [in] ULONG celt,
  3367.                 [out, size_is(celt), length_is(*pceltFetched)]
  3368.                     IComponentType** rgelt,
  3369.                 [out] ULONG* pceltFetched
  3370.                 );
  3371.  
  3372.             HRESULT Skip(
  3373.                 [in] ULONG celt
  3374.                 );
  3375.  
  3376.             HRESULT Reset(void);
  3377.  
  3378.             HRESULT Clone(
  3379.                 [out] IEnumComponentTypes** ppEnum
  3380.                 );
  3381.         }
  3382.  
  3383.  
  3384.     //////////////////////////////////////////////////////////////////////////////////////
  3385.     // Component Type Container
  3386.     //////////////////////////////////////////////////////////////////////////////////////
  3387.  
  3388.         [
  3389.             object,
  3390.             hidden,
  3391.             nonextensible,
  3392.             uuid(0DC13D4A-0313-11d3-9D8E-00C04F72D980),
  3393.             dual,
  3394.             oleautomation,
  3395.             helpstring("ComponentType Collection Interface"),
  3396.             pointer_default(unique)
  3397.         ]
  3398.         interface IComponentTypes : IDispatch
  3399.         {
  3400.             [propget, helpstring("Number of items in the collection")]
  3401.             HRESULT Count(
  3402.                 [out, retval] long *Count
  3403.                 );
  3404.  
  3405.             [propget, id(DISPID_NEWENUM), hidden, restricted]
  3406.             HRESULT _NewEnum(
  3407.                 [out, retval] IEnumVARIANT **ppNewEnum
  3408.                 );
  3409.  
  3410.             [hidden, restricted, helpstring("Convenience Function for Use with C")]
  3411.             HRESULT EnumComponentTypes(
  3412.                 [out, retval] IEnumComponentTypes **ppNewEnum
  3413.                 );
  3414.  
  3415.             [id(DISPID_VALUE),
  3416.                 propget,
  3417.                 helpstring("Get the ComponentType at the specified index")]
  3418.             HRESULT Item(
  3419.                 [in] VARIANT Index,
  3420.                 [out, retval] IComponentType **ComponentType
  3421.                 );
  3422.  
  3423.             [id(DISPID_VALUE),
  3424.                 propput,
  3425.                 helpstring("Get the ComponentType at the specified index")]
  3426.             HRESULT Item(
  3427.                 [in] VARIANT Index,
  3428.                 [in] IComponentType *ComponentType
  3429.                 );
  3430.  
  3431.             [id(DISPID_ADDITEM), 
  3432.              helpstring("Append the ComponentType to the collection")]
  3433.             HRESULT Add(
  3434.                 [in] IComponentType *ComponentType,
  3435.                 [out, retval] VARIANT *NewIndex
  3436.                 );
  3437.  
  3438.             [id(DISPID_REMOVEITEM), 
  3439.              helpstring("Clear the collection")]
  3440.             HRESULT Remove(
  3441.                 [in] VARIANT Index
  3442.                 );
  3443.  
  3444.             [helpstring("Copy the collection")]
  3445.             HRESULT Clone([out, retval] IComponentTypes **NewList);
  3446.         };
  3447.  
  3448.     //////////////////////////////////////////////////////////////////////////////////////
  3449.     // Component Interfaces
  3450.     //////////////////////////////////////////////////////////////////////////////////////
  3451.  
  3452.         [
  3453.             object,
  3454.             nonextensible,
  3455.             uuid(1A5576FC-0E19-11d3-9D8E-00C04F72D980),
  3456.             dual,
  3457.             oleautomation,
  3458.             helpstring("Component Interface"),
  3459.             pointer_default(unique)
  3460.         ]
  3461.         interface IComponent : IDispatch
  3462.         {
  3463.             [propget, id(DISPID_TUNER_C_TYPE),
  3464.                 helpstring("Component Type")]
  3465.             HRESULT Type(
  3466.                 [out, retval] IComponentType** CT
  3467.                 );
  3468.     
  3469.             // only loaders initialize components
  3470.             [hidden, restricted, propput, id(DISPID_TUNER_C_TYPE),
  3471.                 helpstring("Component Type")]
  3472.             HRESULT Type(
  3473.                 [in] IComponentType* CT
  3474.                 );
  3475.  
  3476.             // NOTE: this langid is *not* the same as the langid
  3477.             // in the componenttype(if the componenttype is a languagecomponenttype)
  3478.             // the langid in the component type is the language of the content this
  3479.             // component is describing.  the following langid in the component is the
  3480.             // language of the descriptive info in the component object.
  3481.             [propget, id(DISPID_TUNER_C_LANGID),
  3482.                 helpstring("Language Identifier for Description Language")]
  3483.             HRESULT DescLangID(
  3484.                 [out, retval] long *LangID
  3485.                 );
  3486.  
  3487.             [propput, id(DISPID_TUNER_C_LANGID),
  3488.                 helpstring("Language Identifier for Description Language")]
  3489.             HRESULT DescLangID(
  3490.                 [in] long LangID
  3491.                 );
  3492.  
  3493.             [propget, id(DISPID_TUNER_C_STATUS),
  3494.                 helpstring("Component Status")]
  3495.             HRESULT Status(
  3496.                 [out, retval] ComponentStatus *Status
  3497.                 );
  3498.  
  3499.             [propput, id(DISPID_TUNER_C_STATUS),
  3500.                 helpstring("Component Status")]
  3501.             HRESULT Status(
  3502.                 [in] ComponentStatus Status
  3503.                 );
  3504.  
  3505.             [propget, id(DISPID_TUNER_C_DESCRIPTION),
  3506.                 helpstring("Component Description")]
  3507.             HRESULT Description(
  3508.                 [out, retval] BSTR *Description
  3509.                 );
  3510.  
  3511.             // restricted: only loaders will initialize components
  3512.             [hidden, restricted, propput, id(DISPID_TUNER_C_DESCRIPTION),
  3513.                 helpstring("Component Description")]
  3514.             HRESULT Description(
  3515.                 [in] BSTR Description
  3516.                 );
  3517.  
  3518.             [id(DISPID_TUNER_C_CLONE),
  3519.                 helpstring("Copy Component")]
  3520.             HRESULT Clone(
  3521.                 [out, retval] IComponent **NewComponent
  3522.                 );
  3523.  
  3524.         };
  3525.  
  3526.     //////////////////////////////////////////////////////////////////////////////////////
  3527.         [
  3528.             object,
  3529.             nonextensible,
  3530.             uuid(1493E353-1EB6-473c-802D-8E6B8EC9D2A9),
  3531.             dual,
  3532.             oleautomation,
  3533.             helpstring("MPEG2 Component Interface"),
  3534.             pointer_default(unique)
  3535.         ]
  3536.         interface IMPEG2Component : IComponent
  3537.         {
  3538.             [propget, id(DISPID_TUNER_C_MP2_PID),
  3539.                 helpstring("MPEG2 Packet ID for this Substream")]
  3540.             HRESULT PID(
  3541.                 [out, retval] long *PID
  3542.                 );
  3543.  
  3544.             [propput, id(DISPID_TUNER_C_MP2_PID),
  3545.                 helpstring("MPEG2 Packet ID for this Substream")]
  3546.             HRESULT PID(
  3547.                 [in] long PID
  3548.                 );
  3549.             [propget, id(DISPID_TUNER_C_MP2_PCRPID),
  3550.                 helpstring("MPEG2 Packet ID for this Substream's Timestamps")]
  3551.             HRESULT PCRPID(
  3552.                 [out, retval] long *PCRPID
  3553.                 );
  3554.  
  3555.             [propput, id(DISPID_TUNER_C_MP2_PCRPID),
  3556.                 helpstring("MPEG2 Packet ID for this Substream's Timestamps")]
  3557.             HRESULT PCRPID(
  3558.                 [in] long PCRPID
  3559.                 );
  3560.  
  3561.             // program number provides reverse lookup to PAT
  3562.             [propget, id(DISPID_TUNER_C_MP2_PROGNO),
  3563.                 helpstring("MPEG2 Program Number")]
  3564.             HRESULT ProgramNumber(
  3565.                 [out, retval] long *ProgramNumber
  3566.                 );
  3567.  
  3568.             [propput, id(DISPID_TUNER_C_MP2_PROGNO),
  3569.                 helpstring("MPEG2 Program Number")]
  3570.             HRESULT ProgramNumber(
  3571.                 [in] long ProgramNumber
  3572.                 );
  3573.         };
  3574.  
  3575.     //////////////////////////////////////////////////////////////////////////////////////
  3576.         [
  3577.             hidden, restricted,
  3578.             object,
  3579.             uuid(2A6E2939-2595-11d3-B64C-00C04F79498E),
  3580.             pointer_default(unique)
  3581.         ]
  3582.         interface IEnumComponents : IUnknown
  3583.         {
  3584.             HRESULT Next(
  3585.                 [in] ULONG celt,
  3586.                 [out, size_is(celt), length_is(*pceltFetched)]
  3587.                     IComponent** rgelt,
  3588.                 [out] ULONG* pceltFetched
  3589.                 );
  3590.  
  3591.             HRESULT Skip(
  3592.                 [in] ULONG celt
  3593.                 );
  3594.  
  3595.             HRESULT Reset(void);
  3596.  
  3597.             HRESULT Clone(
  3598.                 [out] IEnumComponents** ppEnum
  3599.                 );
  3600.         }
  3601.  
  3602.  
  3603.     //////////////////////////////////////////////////////////////////////////////////////
  3604.     // Component Container
  3605.     //////////////////////////////////////////////////////////////////////////////////////
  3606.  
  3607.         [
  3608.             object,
  3609.             nonextensible,
  3610.             uuid(FCD01846-0E19-11d3-9D8E-00C04F72D980),
  3611.             dual,
  3612.             oleautomation,
  3613.             helpstring("Component Collection Interface"),
  3614.             pointer_default(unique)
  3615.         ]
  3616.         interface IComponents : IDispatch
  3617.         {
  3618.             [propget, helpstring("Number of items in the collection")]
  3619.             HRESULT Count(
  3620.                 [out, retval] long *Count
  3621.                 );
  3622.  
  3623.             [propget, id(DISPID_NEWENUM), hidden, restricted]
  3624.             HRESULT _NewEnum(
  3625.                 [out, retval] IEnumVARIANT **ppNewEnum
  3626.                 );
  3627.  
  3628.             [hidden, restricted, helpstring("Convenience Function for Use with C")]
  3629.             HRESULT EnumComponents(
  3630.                 [out, retval] IEnumComponents **ppNewEnum
  3631.                 );
  3632.  
  3633.             [id(DISPID_VALUE),
  3634.                 propget,
  3635.                 helpstring("Get the Component at the specified index")]
  3636.             HRESULT Item(
  3637.                 [in] VARIANT Index,
  3638.                 [out, retval] IComponent **ppComponent
  3639.                 );
  3640.  
  3641.             [id(DISPID_ADDITEM), 
  3642.              helpstring("Add the Component to the collection")]
  3643.             HRESULT Add(
  3644.                 [in] IComponent *Component,
  3645.                 [out, retval] VARIANT *NewIndex
  3646.                 );
  3647.  
  3648.             [id(DISPID_REMOVEITEM), 
  3649.              helpstring("Remove the Component at the specified index")]
  3650.             HRESULT Remove(
  3651.                 [in] VARIANT Index
  3652.                 );
  3653.  
  3654.             [helpstring("Copy the collection")]
  3655.             HRESULT Clone([out, retval] IComponents **NewList);
  3656.         };
  3657.  
  3658.     //////////////////////////////////////////////////////////////////////////////////////
  3659.     // Component Container
  3660.     //////////////////////////////////////////////////////////////////////////////////////
  3661.     // this separates the what(general tune request properties) from the where
  3662.     
  3663.  
  3664.  
  3665.         [
  3666.             object,
  3667.             nonextensible,
  3668.             uuid(286D7F89-760C-4F89-80C4-66841D2507AA),
  3669.             dual,
  3670.             oleautomation,
  3671.             helpstring("Generic Locator Information"),
  3672.             pointer_default(unique)
  3673.         ]
  3674.         interface ILocator : IDispatch
  3675.         {
  3676.  
  3677.             [propget, id(DISPID_TUNER_L_CARRFREQ), helpstring("Carrier Frequency(DecaHertz)")]
  3678.             HRESULT CarrierFrequency(
  3679.                 [out, retval] long* Frequency
  3680.                 );
  3681.             [propput, id(DISPID_TUNER_L_CARRFREQ), helpstring("Carrier Frequency(DecaHertz)")]
  3682.             HRESULT CarrierFrequency(
  3683.                 [in] long Frequency
  3684.                 );
  3685.             [propget, id(DISPID_TUNER_L_INNERFECMETHOD), helpstring("Inner Fec Type")]
  3686.             HRESULT InnerFEC(
  3687.                 [out, retval] FECMethod* FEC
  3688.                 );
  3689.             [propput, id(DISPID_TUNER_L_INNERFECMETHOD), helpstring("Inner Fec Type")]
  3690.             HRESULT InnerFEC(
  3691.                 [in] FECMethod FEC
  3692.                 );
  3693.             [propget, id(DISPID_TUNER_L_INNERFECRATE), helpstring("Inner Fec Rate")]
  3694.             HRESULT InnerFECRate(
  3695.                 [out, retval] BinaryConvolutionCodeRate* FEC
  3696.                 );
  3697.             [propput, id(DISPID_TUNER_L_INNERFECRATE), helpstring("Inner Fec Rate")]
  3698.             HRESULT InnerFECRate(
  3699.                 [in] BinaryConvolutionCodeRate FEC
  3700.                 );
  3701.             [propget, id(DISPID_TUNER_L_OUTERFECMETHOD), helpstring("Outer Fec Type")]
  3702.             HRESULT OuterFEC(
  3703.                 [out, retval] FECMethod* FEC
  3704.                 );
  3705.             [propput, id(DISPID_TUNER_L_OUTERFECMETHOD), helpstring("Outer Fec Type")]
  3706.             HRESULT OuterFEC(
  3707.                 [in] FECMethod FEC
  3708.                 );
  3709.             [propget, id(DISPID_TUNER_L_OUTERFECRATE), helpstring("Outer Fec Rate")]
  3710.             HRESULT OuterFECRate(
  3711.                 [out, retval] BinaryConvolutionCodeRate* FEC
  3712.                 );
  3713.             [propput, id(DISPID_TUNER_L_OUTERFECRATE), helpstring("Outer Fec Rate")]
  3714.             HRESULT OuterFECRate(
  3715.                 [in] BinaryConvolutionCodeRate FEC
  3716.                 );
  3717.             [propget, id(DISPID_TUNER_L_MOD), helpstring("Modulation Type")]
  3718.             HRESULT Modulation(
  3719.                 [out, retval] ModulationType* Modulation
  3720.                 );
  3721.             [propput, id(DISPID_TUNER_L_MOD), helpstring("Modulation Type")]
  3722.             HRESULT Modulation(
  3723.                 [in] ModulationType Modulation
  3724.                 );
  3725.             [propget, id(DISPID_TUNER_L_SYMRATE), helpstring("Modulation Symbol Rate")]
  3726.             HRESULT SymbolRate(
  3727.                 [out, retval] long* Rate
  3728.                 );
  3729.             [propput, id(DISPID_TUNER_L_SYMRATE), helpstring("Modulation Symbol Rate")]
  3730.             HRESULT SymbolRate(
  3731.                 [in] long Rate
  3732.                 );
  3733.             [id(DISPID_TUNER_L_CLONE), helpstring("Copy the Locator")]
  3734.             HRESULT Clone([out, retval] ILocator **NewLocator);
  3735.         };
  3736.  
  3737.     //////////////////////////////////////////////////////////////////////////////////////
  3738.         [
  3739.             object,
  3740.             hidden,
  3741.             nonextensible,
  3742.             uuid(BF8D986F-8C2B-4131-94D7-4D3D9FCC21EF),
  3743.             dual,
  3744.             oleautomation,
  3745.             helpstring("ATSC Locator Information"),
  3746.             pointer_default(unique)
  3747.         ]
  3748.         interface IATSCLocator : ILocator
  3749.         {
  3750.             [propget, id(DISPID_TUNER_L_ATSC_PHYS_CHANNEL),
  3751.                 helpstring("Physical Channel")]
  3752.             HRESULT PhysicalChannel(
  3753.                 [out, retval] long *PhysicalChannel
  3754.                 );
  3755.             [propput, id(DISPID_TUNER_L_ATSC_PHYS_CHANNEL),
  3756.                 helpstring("Physical Channel")]
  3757.             HRESULT PhysicalChannel(
  3758.                 [in] long PhysicalChannel
  3759.                 );
  3760.             [propget, id(DISPID_TUNER_L_ATSC_TSID),
  3761.                 helpstring("Transport Stream ID")]
  3762.             HRESULT TSID(
  3763.                 [out, retval] long *TSID
  3764.                 );
  3765.             [propput, id(DISPID_TUNER_L_ATSC_TSID),
  3766.                 helpstring("Transport Stream ID")]
  3767.             HRESULT TSID(
  3768.                 [in] long TSID
  3769.                 );
  3770.         };
  3771.  
  3772.     //////////////////////////////////////////////////////////////////////////////////////
  3773.  
  3774.         [
  3775.             object,
  3776.             hidden,
  3777.             nonextensible,
  3778.             uuid(8664DA16-DDA2-42ac-926A-C18F9127C302),
  3779.             dual,
  3780.             oleautomation,
  3781.             helpstring("DVB Terrestrial Locator Information"),
  3782.             pointer_default(unique)
  3783.         ]
  3784.         interface IDVBTLocator : ILocator
  3785.         {
  3786.             [propget, id(DISPID_TUNER_L_DVBT_BANDWIDTH), helpstring("Bandwidth")]
  3787.             HRESULT Bandwidth(
  3788.                 [out, retval] long* BandWidthVal
  3789.                 );
  3790.             [propput, id(DISPID_TUNER_L_DVBT_BANDWIDTH), helpstring("Bandwidth")]
  3791.             HRESULT Bandwidth(
  3792.                 [in] long BandwidthVal
  3793.                 );
  3794.  
  3795.             [propget, id(DISPID_TUNER_L_DVBT_LPINNERFECMETHOD), helpstring("Inner Fec Type for Low Priority Stream")]
  3796.             HRESULT LPInnerFEC(
  3797.                 [out, retval] FECMethod* FEC
  3798.                 );
  3799.             [propput, id(DISPID_TUNER_L_DVBT_LPINNERFECMETHOD), helpstring("Inner Fec Type for Low Priority Stream")]
  3800.             HRESULT LPInnerFEC(
  3801.                 [in] FECMethod FEC
  3802.                 );
  3803.             [propget, id(DISPID_TUNER_L_DVBT_LPINNERFECRATE), helpstring("Inner Fec Rate for Low Priority Stream")]
  3804.             HRESULT LPInnerFECRate(
  3805.                 [out, retval] BinaryConvolutionCodeRate* FEC
  3806.                 );
  3807.             [propput, id(DISPID_TUNER_L_DVBT_LPINNERFECRATE), helpstring("Inner Fec Rate for Low Priority Stream")]
  3808.             HRESULT LPInnerFECRate(
  3809.                 [in] BinaryConvolutionCodeRate FEC
  3810.                 );
  3811.             [propget, id(DISPID_TUNER_L_DVBT_HALPHA), helpstring("Hierarchical Alpha")]
  3812.             HRESULT HAlpha(
  3813.                 [out, retval] HierarchyAlpha* Alpha
  3814.                 );
  3815.             [propput, id(DISPID_TUNER_L_DVBT_HALPHA), helpstring("Hierarchical Alpha")]
  3816.             HRESULT HAlpha(
  3817.                 [in] HierarchyAlpha Alpha
  3818.                 );
  3819.             [propget, id(DISPID_TUNER_L_DVBT_GUARDINTERVAL), helpstring("Guard Interval")]
  3820.             HRESULT Guard(
  3821.                 [out, retval] GuardInterval* GI
  3822.                 );
  3823.             [propput, id(DISPID_TUNER_L_DVBT_GUARDINTERVAL), helpstring("Guard Interval")]
  3824.             HRESULT Guard(
  3825.                 [in] GuardInterval GI
  3826.                 );
  3827.             [propget, id(DISPID_TUNER_L_DVBT_TRANSMISSIONMODE), helpstring("Transmission Mode")]
  3828.             HRESULT Mode(
  3829.                 [out, retval] TransmissionMode* mode
  3830.                 );
  3831.             [propput, id(DISPID_TUNER_L_DVBT_TRANSMISSIONMODE), helpstring("Transmission Mode")]
  3832.             HRESULT Mode(
  3833.                 [in] TransmissionMode mode
  3834.                 );
  3835.             [propget, id(DISPID_TUNER_L_DVBT_INUSE), helpstring("Hierarchical Alpha")]
  3836.             HRESULT OtherFrequencyInUse(
  3837.                 [out, retval] VARIANT_BOOL* OtherFrequencyInUseVal
  3838.                 );
  3839.             [propput, id(DISPID_TUNER_L_DVBT_INUSE), helpstring("Hierarchical Alpha")]
  3840.             HRESULT OtherFrequencyInUse(
  3841.                 [in] VARIANT_BOOL OtherFrequencyInUseVal
  3842.                 );
  3843.         };
  3844.  
  3845.     //////////////////////////////////////////////////////////////////////////////////////
  3846.         [
  3847.             object,
  3848.             hidden,
  3849.             nonextensible,
  3850.             uuid(3D7C353C-0D04-45f1-A742-F97CC1188DC8),
  3851.             dual,
  3852.             oleautomation,
  3853.             helpstring("DVB Satellite Locator Information"),
  3854.             pointer_default(unique)
  3855.         ]
  3856.         interface IDVBSLocator : ILocator
  3857.         {
  3858.  
  3859.             [propget, id(DISPID_TUNER_L_DVBS_POLARISATION), helpstring("Signal Polarisation Type")]
  3860.             HRESULT SignalPolarisation(
  3861.                 [out, retval] Polarisation* PolarisationVal
  3862.                 );
  3863.             [propput, id(DISPID_TUNER_L_DVBS_POLARISATION), helpstring("Signal Polarisation Type")]
  3864.             HRESULT SignalPolarisation(
  3865.                 [in] Polarisation PolarisationVal
  3866.                 );
  3867.             [propget, id(DISPID_TUNER_L_DVBS_WEST), helpstring("VARIANT_TRUE means orbital position specifies west longitude")]
  3868.             HRESULT WestPosition(
  3869.                 [out, retval] VARIANT_BOOL* WestLongitude
  3870.                 );
  3871.             [propput, id(DISPID_TUNER_L_DVBS_WEST), helpstring("VARIANT_TRUE means orbital position specifies west longitude")]
  3872.             HRESULT WestPosition(
  3873.                 [in] VARIANT_BOOL WestLongitude
  3874.                 );
  3875.             [propget, id(DISPID_TUNER_L_DVBS_ORBITAL), helpstring("Longitude in tenths of a degree")]
  3876.             HRESULT OrbitalPosition(
  3877.                 [out, retval] long* longitude
  3878.                 );
  3879.             [propput, id(DISPID_TUNER_L_DVBS_ORBITAL), helpstring("Longitude in tenths of a degree")]
  3880.             HRESULT OrbitalPosition(
  3881.                 [in] long longitude
  3882.                 );
  3883.             [propget, id(DISPID_TUNER_L_DVBS_AZIMUTH), helpstring("Azimuth in tenths of a degree")]
  3884.             HRESULT Azimuth(
  3885.                 [out, retval] long* Azimuth
  3886.                 );
  3887.             [propput, id(DISPID_TUNER_L_DVBS_AZIMUTH), helpstring("Azimuth in tenths of a degree")]
  3888.             HRESULT Azimuth(
  3889.                 [in] long Azimuth
  3890.                 );
  3891.             [propget, id(DISPID_TUNER_L_DVBS_ELEVATION), helpstring("Elevation in tenths of a degree")]
  3892.             HRESULT Elevation(
  3893.                 [out, retval] long* Elevation
  3894.                 );
  3895.             [propput, id(DISPID_TUNER_L_DVBS_ELEVATION), helpstring("Elevation in tenths of a degree")]
  3896.             HRESULT Elevation(
  3897.                 [in] long Elevation
  3898.                 );
  3899.         };
  3900.  
  3901.     //////////////////////////////////////////////////////////////////////////////////////
  3902.         [
  3903.             object,
  3904.             hidden,
  3905.             nonextensible,
  3906.             uuid(6E42F36E-1DD2-43c4-9F78-69D25AE39034),
  3907.             dual,
  3908.             oleautomation,
  3909.             helpstring("DVB Cable Locator Information"),
  3910.             pointer_default(unique)
  3911.         ]
  3912.         interface IDVBCLocator : ILocator
  3913.         {
  3914.         };
  3915.  
  3916.     //////////////////////////////////////////////////////////////////////////////////////
  3917.     //////////////////////////////////////////////////////////////////////////////////////
  3918.     // TYPELIB & CoClasses
  3919.     //////////////////////////////////////////////////////////////////////////////////////
  3920.     //////////////////////////////////////////////////////////////////////////////////////
  3921.     [
  3922.         uuid(9B085638-018E-11d3-9D8E-00C04F72D980),
  3923.         version(1.0),
  3924.         helpstring("Microsoft Tuner 1.0 Type Library")
  3925.     ]
  3926.     library TunerLib
  3927.     {
  3928.         importlib("stdole2.tlb");
  3929.  
  3930.         // SystemTuningSpaces class
  3931.         [
  3932.             uuid(D02AAC50-027E-11d3-9D8E-00C04F72D980),
  3933.             helpstring("SystemTuningSpace Class")
  3934.         ]
  3935.         coclass SystemTuningSpaces
  3936.         {
  3937.             [default] interface ITuningSpaceContainer;
  3938.         };
  3939.  
  3940.         // NOTE: there is no object factory for this class.  the implementation for the underlying
  3941.         // code is a c++ abstract base class.  this coclass is only provided here to
  3942.         // force vb to expose the base interface to enable polymorphic access to 
  3943.         // derived objects
  3944.         [
  3945.             hidden, restricted,
  3946.             uuid(5FFDC5E6-B83A-4b55-B6E8-C69E765FE9DB),
  3947.             helpstring("dummy class to expose base tuning space i/f to VB")
  3948.         ]
  3949.         coclass TuningSpace
  3950.         {
  3951.             [default] interface ITuningSpace;
  3952.         };
  3953.  
  3954.  
  3955.         [
  3956.             uuid(A2E30750-6C3D-11d3-B653-00C04F79498E),
  3957.             helpstring("ATSC Digital Broadcast Tuning Space Class")
  3958.         ]
  3959.         coclass ATSCTuningSpace
  3960.         {
  3961.             [default] interface IATSCTuningSpace;
  3962.         };
  3963.  
  3964.         [
  3965.             uuid(8A674B4C-1F63-11d3-B64C-00C04F79498E),
  3966.             helpstring("Analog Radio Tuning Space Class")
  3967.         ]
  3968.         coclass AnalogRadioTuningSpace
  3969.         {
  3970.             [default] interface IAnalogRadioTuningSpace;
  3971.         };
  3972.  
  3973.         [
  3974.             uuid(8A674B4D-1F63-11d3-B64C-00C04F79498E),
  3975.             helpstring("Analog TV Tuning Space Class")
  3976.         ]
  3977.         coclass AnalogTVTuningSpace
  3978.         {
  3979.             [default] interface IAnalogTVTuningSpace;
  3980.         };
  3981.  
  3982.         [
  3983.             uuid(C6B14B32-76AA-4a86-A7AC-5C79AAF58DA7),
  3984.             helpstring("DVB Tuning Space Class")
  3985.         ]
  3986.         coclass DVBTuningSpace
  3987.         {
  3988.             [default] interface IDVBTuningSpace;
  3989.         };
  3990.  
  3991.  
  3992.  
  3993.         // ComponentTypes container class
  3994.         [
  3995.             uuid(A1A2B1C4-0E3A-11d3-9D8E-00C04F72D980),
  3996.             helpstring("Component Types Collection Class")
  3997.         ]
  3998.         coclass ComponentTypes
  3999.         {
  4000.             [default] interface IComponentTypes;
  4001.         };
  4002.  
  4003.         // ComponentType class
  4004.         [
  4005.             uuid(823535A0-0318-11d3-9D8E-00C04F72D980),
  4006.             helpstring("ComponentType Class")
  4007.         ]
  4008.         coclass ComponentType
  4009.         {
  4010.             [default] interface IComponentType;
  4011.         };
  4012.  
  4013.         // Language ComponentType class
  4014.         [
  4015.             uuid(1BE49F30-0E1B-11d3-9D8E-00C04F72D980),
  4016.             helpstring("LanguageComponentType Class")
  4017.         ]
  4018.         coclass LanguageComponentType
  4019.         {
  4020.             [default] interface ILanguageComponentType;
  4021.         };
  4022.  
  4023.         // MPEG2 ComponentType class
  4024.         [
  4025.             uuid(418008F3-CF67-4668-9628-10DC52BE1D08),
  4026.             helpstring("MPEG2ComponentType Class")
  4027.         ]
  4028.         coclass MPEG2ComponentType
  4029.         {
  4030.             [default] interface IMPEG2ComponentType;
  4031.         };
  4032.  
  4033.         // ATSC ComponentType class
  4034.         [
  4035.             uuid(A8DCF3D5-0780-4ef4-8A83-2CFFAACB8ACE),
  4036.             helpstring("ATSCComponentType Class")
  4037.         ]
  4038.         coclass ATSCComponentType
  4039.         {
  4040.             [default] interface IATSCComponentType;
  4041.         };
  4042.  
  4043.         // Components class
  4044.         [
  4045.             hidden, restricted,
  4046.             uuid(809B6661-94C4-49e6-B6EC-3F0F862215AA),
  4047.             helpstring("Components Collection Class")
  4048.         ]
  4049.         coclass Components
  4050.         {
  4051.             [default] interface IComponents;
  4052.         };
  4053.  
  4054.         // Component class
  4055.         // the components can only be created by network provider/tif.  client apps
  4056.         // retrieve them from a filled-in tune request by either loading a persisted tune
  4057.         // request that has been filled in by a proper guide store loader or by re-getting
  4058.         // the current tune request property which will have this filled in by the network
  4059.         // provider
  4060.         [
  4061.             hidden, restricted,
  4062.             uuid(59DC47A8-116C-11d3-9D8E-00C04F72D980),
  4063.             helpstring("Component Class")
  4064.         ]
  4065.         coclass Component
  4066.         {
  4067.             [default] interface IComponent;
  4068.         };
  4069.  
  4070.         // MPEG2 Component class
  4071.         [
  4072.             hidden, restricted,
  4073.             uuid(055CB2D7-2969-45cd-914B-76890722F112),
  4074.             helpstring("MPEG2 Component Class")
  4075.         ]
  4076.         coclass MPEG2Component
  4077.         {
  4078.             [default] interface IMPEG2Component;
  4079.         };
  4080.  
  4081.  
  4082.         // NOTE: there is no object factory for this class.  the implementation for the underlying
  4083.         // code is a c++ abstract base class.  this coclass is only provided here to
  4084.         // force vb to expose the base interface to enable polymorphic access to 
  4085.         // derived objects
  4086.         [
  4087.             hidden, restricted,
  4088.             uuid(B46E0D38-AB35-4a06-A137-70576B01B39F),
  4089.             helpstring("dummy class to expose base tune request i/f to VB")
  4090.         ]
  4091.         coclass TuneRequest
  4092.         {
  4093.             [default] interface ITuneRequest;
  4094.         };
  4095.  
  4096.  
  4097.         // NOTE: the tuning request factories should not be invoked directly.
  4098.         // instead apps should use ITuningSpace::CreateTuningRequest to obtain a correctly
  4099.         // initialized tuning request of the appropriate type for that space.
  4100.         // the object factories are provided to allow generic code to a load a previously persisted
  4101.         // tune request object.
  4102.         [
  4103.             hidden,
  4104.             restricted,
  4105.             uuid(0369B4E5-45B6-11d3-B650-00C04F79498E),
  4106.             helpstring("Channel Tune Request")
  4107.         ]
  4108.         coclass ChannelTuneRequest
  4109.         {
  4110.             [default] interface IChannelTuneRequest;
  4111.         };
  4112.  
  4113.         [
  4114.             hidden,
  4115.             restricted,
  4116.             uuid(0369B4E6-45B6-11d3-B650-00C04F79498E),
  4117.             helpstring("ATSC Channel Tune Request")
  4118.         ]
  4119.         coclass ATSCChannelTuneRequest
  4120.         {
  4121.             [default] interface IATSCChannelTuneRequest;
  4122.         };
  4123.  
  4124.  
  4125.         // NOTE: there is no object factory for this class.  the implementation for the underlying
  4126.         // code is a c++ abstract base class.  this coclass is only provided here to
  4127.         // force vb to expose the base interface to enable polymorphic access to 
  4128.         // derived objects
  4129.         [
  4130.             hidden, restricted,
  4131.             uuid(0888C883-AC4F-4943-B516-2C38D9B34562),
  4132.             helpstring("dummy class to expose base locator i/f to VB")
  4133.         ]
  4134.         coclass Locator
  4135.         {
  4136.             [default] interface ILocator;
  4137.         };
  4138.  
  4139.         // its not intended that client apps actually create locators.  the network
  4140.         // provider in combination with the transport information filter(TIF) are the 
  4141.         // only modules in the system that actually know the correct values for these objects
  4142.         // however, for testing purposes, its necessary to allow these to be created.
  4143.         // instead, normally these will simply be passed around opaquely since they're a 
  4144.         // property of the base tune request interface.
  4145.         [
  4146.             uuid(8872FF1B-98FA-4d7a-8D93-C9F1055F85BB),
  4147.             helpstring("ATSC Locator")
  4148.         ]
  4149.         coclass ATSCLocator
  4150.         {
  4151.             [default] interface IATSCLocator;
  4152.         };
  4153.  
  4154.         [
  4155.             uuid(9CD64701-BDF3-4d14-8E03-F12983D86664),
  4156.             helpstring("DVB-Terrestrial Locator")
  4157.         ]
  4158.         coclass DVBTLocator
  4159.         {
  4160.             [default] interface IDVBTLocator;
  4161.         };
  4162.  
  4163.         [
  4164.             uuid(1DF7D126-4050-47f0-A7CF-4C4CA9241333),
  4165.             helpstring("DVB-Satellite Locator")
  4166.         ]
  4167.         coclass DVBSLocator
  4168.         {
  4169.             [default] interface IDVBSLocator;
  4170.         };
  4171.  
  4172.         [
  4173.             uuid(C531D9FD-9685-4028-8B68-6E1232079F1E),
  4174.             helpstring("DVB-Cable Locator")
  4175.         ]
  4176.         coclass DVBCLocator
  4177.         {
  4178.             [default] interface ILocator;
  4179.         };
  4180.  
  4181.         [
  4182.             hidden,
  4183.             restricted,
  4184.             uuid(15D6504A-5494-499c-886C-973C9E53B9F1),
  4185.             helpstring("DVB Tune Request")
  4186.         ]
  4187.         coclass DVBTuneRequest
  4188.         {
  4189.             [default] interface IDVBTuneRequest;
  4190.         };
  4191.  
  4192.     // Sample tuner class definition:
  4193.     //
  4194.     //  [
  4195.     //      uuid(<some guid>),
  4196.     //      helpstring("My Tuner object")
  4197.     //  ]
  4198.     //  coclass MyTuner
  4199.     //  {
  4200.     //      [default] interface ITuner;
  4201.     //      interface IMyTunerCustomFeatureInterface;
  4202.     //      [default, source] interface ITunerEvents;
  4203.     //      [source] interface ISignalEvents;
  4204.     //  };
  4205.  
  4206.     ///////////////////////////////////////////////////////////////////////////////////////
  4207.     // utility objects
  4208.     ///////////////////////////////////////////////////////////////////////////////////////
  4209.         [
  4210.             hidden, restricted,
  4211.             uuid(8A674B49-1F63-11d3-B64C-00C04F79498E),
  4212.             helpstring("Create property bag backed by registry")
  4213.         ]
  4214.         coclass CreatePropBagOnRegKey
  4215.         {
  4216.             interface ICreatePropBagOnRegKey;
  4217.         };
  4218.  
  4219.     }
  4220.  
  4221.  
  4222. #endif    // DirectX 8.0 content
  4223.  
  4224.  
  4225. // end of file -- tuner.idl
  4226.